2010-11-01 80 views
0

那么正如标题所说如何动态获取系统架构?

有没有什么办法可以在C++中获得系统架构?

谢谢!

+4

您是否需要检测您的应用程序是针对x86还是x86_64进行*编译,或者您的x86应用程序是否在x86_64计算机上运行?您需要的区别只是x86/x86_64还是需要区分其他体系结构?您是否需要在预编译时(在#if语句中使用),编译时(例如用于模板专业化,数组大小等)或运行时检测到这种情况? – 2010-11-01 23:10:16

+2

此外,您是否询问CPU体系结构,操作系统体系结构(您可以在64位CPU上运行32位Windows)还是特定的进程体系结构(32位进程可以在64位Windows上运行)? – 2010-11-01 23:12:45

+0

为什么?陈述您对此信息的要求可能会帮助您为您的方案获得更有用的答案。 – 2010-11-02 00:40:23

回答

4

基于“动态”和“Visual C++”,我猜测你想在Windows下运行时执行此操作。

在这种情况下,您可以使用GetSystemInfoGetNativeSystemInfo来检索有关系统和处理器的一些基本信息。如果您需要有关处理器及其支持的特定功能的更多信息,则可以使用IsProcessorFeaturePresent找到它们(尽管对于此目的它可能有点尴尬 - 您必须单独询问每个功能,并为每个功能给出布尔答案)。

2
#if defined(_M_X64) 
... 
#endif 
+0

特定平台,但实际上我认为没有更好的预编译时检测方法。 – 2010-11-01 23:07:56

+0

您可以编译32位模式的可执行文件,但可以在x64机器上运行它。 – Gabe 2010-11-01 23:08:23

3

有一个漂亮的大名单here。 Visual Studio和GCC的宏是不同的,但只要检查它们是否用#ifdef定义。

喜欢的东西:

#if defined(_M_IX86) || defined(__i386__) 

应该给你GCC,Visual Studio中,和其他几个人。

+1

链接已死... – ManuelSchneid3r 2017-10-30 16:10:39

0

在x64平台上sizeof(void*)返回8.在x32平台sizeof(void*)返回4.这也应该是跨平台的。