![](/img/trans.png)
[英]How does this piece of code determine array size without using sizeof( )?
[英]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.