不使用 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
。
有没有办法在不使用 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
。