登录
首页 >  Golang >  Go问答

如何选择字体大小来确定架构位数(32位或64位)?

来源:stackoverflow

时间:2024-03-20 08:48:26 298浏览 收藏

通过分析特定位移的值,您可以确定计算机的架构位数(32 位或 64 位)。此方法在编译时计算,而不是运行时,因此它适用于在不同架构机器上运行的程序。借助位移技术,您可以确定诸如 int、uint 和 uintptr 等数据类型的位数,从而指示操作系统架构。这种方法在 Go 语言的 math 包中使用,但相关常量未导出。

问题内容

我不是在寻找 runtime.GOARCH,因为它给出了已编译程序的架构。我想检测操作系统架构,假设我在 64 位机器上运行 32 位 go 程序,我需要将其识别为 64 位而不是 32 位。


正确答案


借助一些位移 foo,您可以通过定义适当的常量(下面称为 bitsperword)来确定 int/uint/uintptr 的大小。作为 go 常量,它当然是在编译时而不是运行时计算的。

此技巧是 used in the math package,但相关常量 (intsize) 未导出。

package main

import "fmt"

const BitsPerWord = 32 << (^uint(0) >> 63)

func main() {
    fmt.Println(BitsPerWord)
}

(Playground)

说明

  1. ^uint(0) 是设置了所有位的 uint 值。
  2. 将第一步的结果右移 63 位,得到
  • 32 位架构上的 0,以及
  • 64 位架构上的 1
  1. 32 左移与第二步结果一样多的位置,得到
  • 32 位架构上的 32,以及
  • 64 位架构上的 64

好了,本文到此结束,带大家了解了《如何选择字体大小来确定架构位数(32位或64位)?》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>