有没有办法在不使用sizeOf运算符的情况下知道CPU是32位还是64位?
可以为此编写任何其他代码吗?
答案 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
/* ... */;
}