如何查找机器是32位还是64位

无论如何,从C编程中找出操作系统当前是以32位还是64位模式运行。 我正在使用如下的简单程序

int main(void){ switch(sizeof(void*)){ case 4: printf("32\n"); break; case 8: printf("64\n"); break; } } 

这是正确的方法吗? 这个代码是否适用于所有场景,例如,如果硬件是64位且操作系统是32位,它会返回什么? 我没有机器在diff配置中测试它。

感谢您的建议。

  • 一般情况下,32位可执行文件无法判断它是在64位操作系统还是32位操作系统下运行(某些操作系统可能有一种方法可以告诉,我知道没有,但我没有搜索过),一个64位可执行文件不能在32位操作系统下运行(如果你忽略了32位操作系统模拟运行64位操作系统的处理器的可能性……)

  • sizeof()结果主要是一个编译时常量,它不会返回不同的东西,具体取决于它运行的操作系统版本。

你真的想知道什么?

严格按照给出的方式回答您的问题:

 #include  #include  #include  #include  int main(void) { long wordBits = sysconf(_SC_WORD_BIT); if (wordBits == -1 && errno == EINVAL) return EXIT_FAILURE; else printf("%ld\n", wordBits); return EXIT_SUCCESS; } 

这适用于任何正确配置glibc的情况,并将寄存器大小打印到stdout,否则返回退出代码1。

也可以看看

  • 的sysconf

除了编译时方法,如果您在Windows上运行:如果进程是32,则对IsWow64Processhttp://msdn.microsoft.com/en-us/library/ms684139.aspx )的调用将返回true -bit在64位Windows下运行。

在Windows中,您可以查看PROCESSOR_ARCHITECTURE环境变量。 当程序以32位模式运行时,它将返回“x86”(因为它在32位操作系统下运行,或者因为它在64位操作系统上运行,而在WOW64下运行为32位程序)或“IA64” “或”AMD64“如果在64位操作系统上作为本机64位程序运行。

回答这个问题的唯一方法是:

(1)使用一些特定于系统的function(API调用,环境变量等)来告诉您操作系统是32位还是64位。

要么

(2)使用一些编译器提供的宏来告诉你同样的事情(如果有的话)。

任何内置的标准语言function都无法确定您拥有哪种操作系统。 它们由编译器提供,完全独立于OS。

我认为您的解决方案可能在大多数常见情况下都有效; 当然,在所有标准的IA64数据模型中,指针都是64位。 然而,理论上所有架构都可能不是这样。 如果编译器具有C99头,则测试sizeof(uintptr_t)可能更安全; 但又假设地址宽度表示寄存器宽度; 它取决于“64位”是指地址范围还是整数范围 – 它们不必相同。

由于32位和64位编译需要不同的编译器或不同的编译器开关,因此必须在构建时知道目标体系结构,并且无需在运行时确定。

大多数编译器都提供内置的体系结构宏,以便在构建时确定它。 有关各种编译器,操作系统和体系结构的此类宏的完整列表,请参见: http : //predef.sourceforge.net/