Windows目錄下SysWow64文件夾與System32文件夾

首先說一句,被坑不淺……小程序

System32ide

Windows 操做系統的系統文件夾。是操做系統的神經中樞.文件夾中包含了大量的用於Windows操做系統的文件.這裏主要用於存儲 DLL 文件,控制面板小程序(.CPL), 設備驅動 (.drv), 幫助文件 (.hlp 和 .cnt), MS-DOS 工具 (.com), 語言支持文件 (.nls), 屏幕保護 (.scr), 安裝信息文件 (.inf), 以及其它用於支持,配置,或操做的文件。工具

注意:spa

不要被文件夾名字中32矇蔽了!!!在64位操做系統中,此文件夾裏的程序庫都是64位的,64位的,64位的……操作系統


SysWow64設計

wow,什麼是wow?blog

64位的Windows並非簡單地把全部東西都編譯成64位就萬事大吉的。關於64位的CPU應該作成什麼樣子,Intel和AMD曾有各自的打算。AMD的回答直接了當:新的64位處理器,應該能在提升更高處理能力的同時,保持對32位應用程序的兼容性。而Intel則但願藉此機會,把下一代的處理器,設計得更完美。因而,就有了AMD的x86-64(後被稱爲amd64)的處理器和Intel的IA-64(安騰)處理器。和amd64不同的是,安騰處理器並無很好地提供對32位應用程序的支持。具體信息,讀者在網上應該很容易找到,也就很少說了。編譯器

Windows做爲一個操做系統,天然但願用戶在運行64位操做系統時,也能像之前同樣,運行各類32位應用程序。這一點,在amd64處理器上,相對容易作到。而安騰,幾乎是另一回事。(後來Intel也生產了兼容amd64的處理器,但那是後話。)it

雖然我說「相對」容易作到,但也不是空手套白狼。當操做系統運行在64位時,怎麼才能保證已經存在的32位應用程序覺得本身仍然運行在32位系統上呢?微軟的解決方案是:Wow64,全稱是32bit Windows On 64bit Windows(64位Windows上的32位Windows)。io

你也能夠這樣理解,雖然整個系統是運行在64位模式,但若是一個應該程序是32位的,Windows會在64位的基礎上,加載一個「32位的Windows」。這樣,這個32位應用程序就覺得本身是運行在32位的系統之上的。

因而,你也能夠想象,這就意味着,64位的Windows,不但帶有64位操做系統應有的系統文件,還帶有32位系統應有的系統文件。

咱們都知道的是,Windows系統的主要系統文件都是放在一個叫作System32的文件夾中的。爲了能同時放下兩套系統文件,Windows會在64位的系統上,增長了一個文件夾,叫SysWow64。

這便有了一個問題,System32和SysWow64裏面,哪一個放的是64位的系統文件,哪一個放的是32位的系統文件呢?

若是你還記得Wow64指的是64位Windows上的32位Windows,那麼,你就能會想到,SysWow64裏放的是32位的系統文件。但你也可能會問,爲何一個明明叫System32的文件夾裝的是64位的系統文件,而一個明明叫SysWow64的文件夾裝的倒是32位的系統文件呢?既然是64位的系統,爲何不能有System64和System32這樣的文件夾呢?

這個問題問得很好。答案也很簡單:人在江湖,身不禁己。

兼容性

若是我問你,可曾有多少機會接觸過安騰處理器呢?我想,對於通常人來說,應該是沒有的。那爲何amd64會大行其道,而安騰處理器卻不爲人知呢?仍是由於一個軟硬件設計上的關鍵概念:兼容性。

正是由於安騰處理器,沒有作好對已有的32位系統提供良好的支持,便其一直處於市場的邊緣。這和你不會買一臺看不了模擬信號頻道的高清電視是一個道理。

以前咱們談到的兼容性,是指在64位Windows上,兼容已經有的32位應用程序。如今考慮另外一種兼容性。

若是你寫了一個很牛的32位的應用程序,如今,你想把它變成64位的應用程序,以更充分地利用64位處理器所帶來的新的處理能力。你確定以爲,這不就是讓64位編譯器編譯一遍就完了的事兒麼?可能你發現,這並非骨感的現實。你忽然發現,你的程序裏,爲了某些你已經想不起來的緣由,把System32這個文件夾,寫死在了你的程序裏。而這個System32中的32,讓你很不安。你嘗試着運行了你的程序,卻發現一切正常。爲何呢?由於這是Windows系統的另外一個兼容性方面的努力:讓一個已有的32位應用程序,不加修改或者儘量少地加以修改,即可以被編譯成64位應用程序並在64位Windows上運行。其實,把System32這樣的路徑,寫死在程序裏,並非一個個案。因此,爲了保證這些應用程序能夠順利地過渡到64位,Windows最後仍是決定讓64位的系統文件放在System32的文件夾下。而讓32位的系統文件,搬到了SysWow64中去。

你確定會想,那讓32位搬到SysWow64中去之後,那些寫死在32位應用程序中的System32怎麼辦?答:Windows會給他們轉向到SysWow64中去。那讓64位中的System32轉向到System64不也是同樣麼?真的同樣麼?不同麼?真的同樣麼?不同麼?真的不同。

做爲64位Windows操做系統,固然是但願能充分發揮64位處理器的潛力,讓應用程序更有效率地運行。若是在運行64位應用程序時,總要檢查是否須要轉向,勢必影響程序運行效率。因此,不能給64位應用程序作沒有必要的轉向,若是說必需要轉,那就只能轉32位應用程序了。是的,沒有辦法,在64位操做系統中,32位應用程序要作一些小的犧牲。

此外,爲了保證32位應用程序不與64位應用程序相沖突,除了System32文件夾外,註冊表也須要爲32位和64位提供兩套,也須要讓32位的應用程序在必要時重定向。

結論

因此SysWow64文件夾,是64位Windows,用來存放32位Windows系統文件的地方。

後記

本人被這個問題坑害不淺。寫個程序放在winXP下運行老是出現0Xc000007b的錯誤,查了好多材料,都說是我32位程序引用64位版本庫所至,因而我就傻乎乎的從原來系統的System32中去下載所謂的「32位」程序庫,結果一點兒用都沒有,鬱悶的要死……一天整我的都很差了……

本文部分參考:http://blogs.msdn.com/b/tianlin/archive/2011/10/26/syswow64.aspx

相關文章
相關標籤/搜索