2010-08-18 237 views

回答

22

它無關效率。本機和交叉編譯器都會生成相同的機器碼。然而,通過在64位工作站上運行本機64位編譯器進程(更大的寄存器,更大的內存空間等),您將獲得一些好處。

本地編譯器將只在Windows的64位副本上運行,所以如果你的工作站是32位編譯器的將不能運行。

交叉編譯意味着即使它會在Windows的64位副本通過魔獸世界運行的x86機器上運行;但是,沒有理由這樣做。

你鏈接的網頁說,這非常好:

64在x86(64位交叉編譯)
允許 您創建輸出文件針對x64。 此版本的cl.exe作爲 32位進程運行,本機位於x86 機器上,位於WOW64下的64位 Widows操作系統上。在x64

64允許您創建輸出 文件64。此版本的cl.exe 作爲本機進程在x64 機器上運行。

感謝Brian R. Bondy的報價格式

7

從你掛什麼:

64在x86(64位交叉編譯)
允許 您創建輸出文件針對x64。 此版本的cl.exe作爲 32位進程運行,本機位於x86 機器上,位於WOW64下的64位 Widows操作系統上。在x64

64允許您創建輸出 文件64。此版本的cl.exe 作爲本機進程在x64 機器上運行。

意譯:

如果使用x86_amd64,那麼你通常開發的x86機器上,你想創建一個在x64上本地運行的x64文件。您也可以在x64機器上使用此選項,但編譯器將在WOW64仿真下運行。

如果您使用AMD64,那麼您正在使用x64機器進行開發,並且希望創建在x64上本機運行的x64文件。編譯器以x64本機運行。此選項對於構建x64程序更有效。

您可能想知道爲什麼您會在x86計算機上開發一個x64程序,因爲您無法運行它而無法調試它。那麼它仍然有用,例如,如果你有一個x86版本的構建服務器,並且構建服務器需要同時生成x86和x64輸出。

如果編譯器是基於x86的程序(x86_amd64),它如何在x64下運行?這就是你可以在你的x64機器上運行任何x86程序的原因......感謝WOW64仿真。

什麼是WOW64仿真:當你在x64計算機(或IA64)上運行的x86程序

WOW64仿真發生。 WOW64代表Windows 64上的Windows 32,它是x64機器上的仿真層,允許您執行x86程序。

您的文件系統操作將被重定向到WOW64文件夾,您的註冊表也將被重定向到一個子節點。例如,當您嘗試獲取程序文件的文件夾時,如果您使用的是WOW64,它將返回c:\program files (x86)\,但如果您使用的是x64,則它將返回c:\program files\

另一個示例,對於註冊表,如果您嘗試寫入HKLM\Software\Something,它將確實將您重定向到HKLM\SOFTWARE\Wow6432Node\Something,而無需您的x86程序知識。

運行原生64位編譯會比通過WOW64仿真運行爲什麼更有效?因爲您沒有將32位調用轉換爲64位調用的額外仿真層。

通過,如果你運行的是Windows x64版本,你可以看到哪些進程正在通過WOW64運行,因爲他們將有一個* 32附加到進程列表進程名稱的方式。

+0

無論是x86_amd64和AMD64版本創造條件,既作爲運行在64位操作系統原生64位進程或x64原生的可執行文件。 WOW64用於在x64操作系統上運行32位本機可執行文件。 x86編譯器將生成本機32位可執行文件,它將在WOW64下運行。 – joshperry 2010-08-18 01:20:49

+0

@ joshperry:同意看我的編輯。 – 2010-08-18 01:21:24

+0

@ BrianR.Bondy有點當天晚些時候,但我仍然由amd64_x86選項混淆。我知道它允許工具集(cl/link)以64位進程運行。好。但生成的二進制文件是針對x86架構的,對嗎?後者究竟意味着什麼?由amd64_x86生成的64位二進制文​​件是無用的? – ForeverLearning 2017-11-10 22:31:49