不使用 sizeof 确定 CPU 大小的 C 代码

C code to determine the size of CPU without using sizeof

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

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

您的代码应该是为 运行 所在的处理器构建的,因此它会在编译器指令中。 看看数学图书馆是如何处理它的,然后去做。 它对于不同的编译器是不同的,但你不能用 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 
        /* ... */;
}

本题How to determine whether a given Linux is 32 bit or 64 bit?

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

system("getconf LONG_BIT")

并检查它是 return。如果它说 64 就是 64 位内核,如果它是 32 就是 32 位内核。

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

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

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

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