Windows 64位系統下,x64和x86以及System32目錄和SysWOW64目錄的區別


   結論

32位操作系統的Windows文件夾中,  

SYSTEM SYSTEM32 兩個文件夾,分別用來存放 16 位和 32 位的DLL文件。

64位操作系統的Windows文件夾中,

System32 SysWOW64 兩個文件夾,分別用來存放 64 位和 32 位的DLL文件。

因此 ,與人們想當然的正好相反,

            X64 程序 dll 加載路徑為 C:\Windows\System32,

            X86 程序 dll 加載路徑為 C:\Windows\SysWOW64

同樣 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib 存放 x86 程序依賴庫,

       C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\lib\amd64存放 x64 程序依賴庫。

背景

WOW64的全稱是32bit Windows On 64bit Windows,即運行在64位系統上的32位程序。

由於很多應用程序內部寫死了C:\Windows\System32的引用路徑,所以windows為了保持這些應用程序在64位系統上的兼容性,便將64位的系統庫放C:\Windows\System32目錄下,同時,將32位的系統庫轉存到C:\Windows\SysWOW64目錄下。而如果應用程序為32位,需要運行在64位系統上時,操作系統會對系統庫路徑和注冊表進行重定向,將動態庫引用目錄重定向到SysWOW64中。

之所以將64位的系統庫仍然存放在C:\Windows\System32中,而將32位的系統庫轉存到C:\Windows\SysWOW64,是為了更好地保持程序的兼容性。即:64位程序不需要修改代碼(例如將代碼中寫死的C:\Windows\System32修改為C:\Windows\System64)和工程屬性(例如將C:\Windows\System32的引用路徑修改為C:\Windows\System64),只需要將代碼編譯為64位程序,仍然引用C:\Windows\System32這個路徑,即可在64位系統上運行。

而之所以對64位系統上的32位程序做重定向,而不是對64位程序做重定向,是為了更好地發揮64位系統的效率,使64位系統更好地為64位程序服務。試想,如果不采用這種設計,而是將64位的系統庫存放在C:\Windows\System64目錄下,那么對於仍然引用C:\Windows\System32的64位應用程序,操作系統需要把所有引用路徑重定向到C:\Windows\System64中,同時對注冊表進行重定向,那么將一定程度上影響64位程序的運行效率。

相關 : 什么是SysWow64

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM