2010-11-01 50 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.這也應該是跨平臺的。