有人可以通过简单的c程序来查找我的机器是16位还是32位或64位?如何使用c程序找到我的机器是16位还是32位或64位
回答
这应该工作:
#include <iostream>
int main(int argc, char ** arv){
std::cout << "sizeof(void*)=" << sizeof(void*) << std::endl;
return 0;
}
看到我的对HPT的回答发表评论。 – 2010-09-06 08:54:07
另外,这不是C. – domen 2010-09-06 09:21:07
为“实现细节”这正是那种被冷落的C语言的正式规范的东西;考虑到编译器在理论上应该将它隐藏起来,在技术上你所能做的任何事情都是依赖于“未定义的非标准行为”。
这就是迂回的答案。实际的答案是,您可以使用sizeof(int)
来确定您的特定架构上的寄存器宽度,并使用任何合理的编译器。
注意,这是在编译时确定,而不是运行时间,所以它会告诉你是否在32位或64位(或任何位)模式,而不是它是否是例如,您的应用程序是编译在模拟32位x86的64位机器上运行。对于这类信息,您需要查看完全特定于平台的内容,例如CPUID
。
不要为此使用'sizeof(int)'。它(实际上)不会给你正确的答案。相反,'sizeof(size_t)','sizeof(ptrdiff_t)'或sizeof(char *)'是很好的选择。 (在任何健全的机器上,它们都将是相同的。) – 2010-09-06 12:21:21
sizeof(char *)在具有不同指针大小的平台上不起作用(例如,实模式下的x86与near/far/huge指针无关)。 size_t可能会。哪些编译器具有不是寄存器宽度的“int”类型? – Crashworks 2010-09-07 00:17:27
编译器必须知道编译时它正在建设什么架构,所以应该没有必要确定该在运行。
编译器通常会有一个预定义的宏指示体系结构;您将不得不测试您打算构建的所有体系结构。如果您只关心linux操作系统,那么您可以使用uname()调用。您可以将struct utsname传递给此API并获取详细信息。有关各种体系结构的宏的列表,请参阅http://predef.sourceforge.net/prearch.html
这里有多层编译器 - 操作系统 - 处理器。 从用户C程序获取机器拱不是可取的,因为您没有足够的信息并且不具备便携性。
但是如果u想知道像Linux一样在这里特定的操作系统是link
可以使用上述工具的帮助下在你的程序。
您可以使用预处理:
#ifdef __i386__
blahblah
#elif __arm__
blahblah
#elif defined(__x86_64__) || defined(_M_AMD64) || defined (_M_X64)
blahblah
#endif
- 1. 如何判断我写的程序是32位还是64位?
- 2. 如何找到Android应用程序是32位或64位
- 3. 如何检测Cocoa应用程序是32位还是64位?
- 4. 如何找到它是32位还是64位? Tomcat
- 5. 使用WMI,我如何确定远程进程是32位还是64位?
- 6. 如何检查我的Perl安装是32位还是64位?
- 7. 无论系统是32位还是64位,uint均为32位?
- 8. 知道程序集是64位还是32位
- 9. 我还可以使用64位机器开发32位应用程序吗?
- 10. 如何确定进程ID(PID)是32位还是64位应用程序?
- 11. 如何查找我的Amazon EC2实例是32位还是64位?
- 12. 在32位和64位机器中总是长64位
- 13. 如何判断应用程序是以32位还是64位模式运行?
- 14. 我应该使用32位还是64位JDK?
- 15. 我应该使用Python 32位还是Python 64位
- 16. 32位或64位?使用C代码
- 17. 如何检查安装的wxPython是32位还是64位?
- 18. 如何检查安装的Anaconda是32位还是64位?
- 19. 我在x86-64 PC上运行32位Windows。我应该下载32位还是64位的Python安装程序?
- 20. 如何检测,如果CPU是32位还是64位
- 21. 确定可执行文件(或库)是32位还是64位
- 22. 在64位机器上编译32位matlab应用程序(C++)
- 23. 如何检查WebSphere是32位还是64位?
- 24. 如何确定System.Diagnostics.Process是32位还是64位?
- 25. 我如何制作32位或64位应用程序?
- 26. 如何以编程方式检测64位或32位机器?
- 27. 如何判断我的应用程序是作为32位还是64位应用程序运行的?
- 28. 检查处理器是32位还是64位
- 29. 是否可以使用PHP知道我的平台是64位还是32位?
- 30. 有没有办法检查进程是64位还是32位?
这是不可能的* *一般,但对于具体的架构或操作系统是可以做到的。 – caf 2010-09-06 08:31:00
我正在使用linux gcc编译器 – Jagan 2010-09-06 08:31:36
是否还有16位Linux/GCC实现!? – Clifford 2010-09-06 09:16:00