繁体   English   中英

不使用sizeof判断CPU大小的C代码

[英]C code to determine the size of CPU without using sizeof

有没有办法在不使用 sizeOf 运算符的情况下知道 CPU 是 32 位还是 64 位?

可以为此编写任何其他代码吗?

在这个问题中如何确定给定的 Linux 是 32 位还是 64 位?

要检查系统是 32 位还是 64 位内核,您可以调用

system("getconf LONG_BIT")

并检查它的回报。 如果它说 64 它是一个 64 位内核,如果它是 32 它是 32 位内核。

要检查 cpu 是否支持 64 位,您可以在文件 /proc/cpuinfo 中检查它是否有标志“lm”(长模式)

system("grep flags /proc/cpuinfo | grep -c lm")

如果返回值为 1,则存在 lm 标志(64 位),如果为 0,则不存在(32 位)

这只是linux。 其他选项在开头链接的问题中。 例如,有些包括检查limits.h

您的代码应该是为运行它的处理器构建的,因此它将在编译器指令中。 看看数学库如何处理它,然后这样做。 不同的编译器是不同的,但你不能用 C 代码普遍地做到这一点。 例如:所有平台都应该支持 64 位值。 他们如何处理它们将取决于编译器指令。

指针数学怎么样? 取指针数组中两个元素的地址,确定它们相距 8 字节还是 4 字节。

{
    char * pa[2];
    char * pa1 = (char *)&pa[1];
    char * pa0 = (char *)&pa[0];
    if (pa1 - pa0 > 4)
        /* 64 bit pointers */;
    else 
        /* ... */;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM