結論
在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