如何使用c-program查找我的机器是16位还是32位还是64位

时间:2010-09-06 08:29:05

标签: c linux

有人可以提供简单的c程序来查找我的机器是16位还是32位还是64位?

6 个答案:

答案 0 :(得分:4)

如果您只关心Linux操作系统,那么您可以使用uname()调用。您可以将struct utsname传递给此API并获取详细信息。您可以获得有关以下网址的更多详细信息

http://linux.die.net/man/2/uname

另外,查看uname命令源代码可以为您提供更多帮助。

答案 1 :(得分:1)

作为一个“实现细节”,这正是C语言的正式规范中遗漏的东西;鉴于编译器理论上应该隐藏这一点,你在技术上可以做的任何事情都取决于“未定义的非标准行为。”

这是迂腐的答案。实际的答案是,您可以使用sizeof(int)通过任何合理的编译器确定特定体系结构的寄存器宽度。

请注意,这是在编译时确定的,而不是运行时,因此它会告诉您应用程序是否在32位或64位(或任何位)模式下编译,而不是它是例如在模拟32位x86的64位机器上运行。对于这类信息,您需要查看完全特定于平台的内容,例如CPUID

答案 2 :(得分:0)

编译器必须知道编译时它正在构建什么体系结构,因此不需要在运行时确定它。

编译器通常会有一个指定架构的预定义宏;您将不得不测试您打算构建的所有体系结构。 http://predef.sourceforge.net/prearch.html

提供了各种体系结构的此类宏列表

答案 3 :(得分:0)

这里有多个层编译器 - 操作系统 - 处理器。 不建议从用户C程序获取机器拱门,因为您没有足够的信息且不可移植。

但是,如果您想知道像Linux这样的特定操作系统,那么link

您可以在程序中使用上述工具的帮助。

答案 4 :(得分:0)

您可以使用预处理器:

#ifdef __i386__
    blahblah
#elif __arm__
    blahblah
#elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
     blahblah
#endif

答案 5 :(得分:-2)

这应该有效:

#include <iostream>
int main(int argc, char ** arv){
  std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl;
  return 0;
}