C代码在不使用sizeof的情况下确定CPU的大小

时间:2016-03-10 14:28:31

标签: c cpu-architecture

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

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

3 个答案:

答案 0 :(得分:2)

在这个问题中How to determine whether a given Linux is 32 bit or 64 bit?

要检查系统是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

答案 1 :(得分:1)

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

答案 2 :(得分:-1)

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

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