4 GB 微調:BCDEdit 和 Boot.ini
在 32 位版本的 Windows 上,應用程式有 4 GB (GB 的虛擬位址空間可用) 。 虛擬位址空間會分割,讓應用程式可以使用 2 GB,而其他 2 GB 則僅適用于系統。 使用 BCDEdit /set increaseuserva 命令啟用的 4 GB 微調 (4 GB 或 4GT RAM) 微調功能、將應用程式可用的虛擬位址空間增加到最多 3 GB,並將系統可用的數量減少為 1 到 2 GB。
對於需要大量記憶體的應用程式,例如資料庫管理系統 (DBMS) ,使用較大的虛擬位址空間可提供相當多的效能和延展性優勢。 不過,檔案快取、分頁集區和非分頁集區較小,這可能會對大量網路或 I/O 的應用程式造成負面影響。 因此,您可能想要在負載下測試應用程式,並檢查效能計數器,以判斷您的應用程式是否受益于較大的位址空間。
若要啟用 4GT,請使用 BCDEdit /set 命令,將 increaseuserva boot entry 選項設定為介於 2048 (2 GB) 和 3072 (3 GB) 之間的值。
Windows Server 2003 和更早版本: 若要啟用 4GT,請將 /3GB 參數新增至Boot.ini檔案。 下列系統支援 /3GB 交換器:
- Windows Server 2003
- Windows XP Professional
/3GB交換器可讓應用程式使用完整的 3 GB 虛擬位址空間,並將系統可用的數量減少為 1 GB。 在 Windows Server 2003 上,將 /USERVA Boot.ini 參數設定為介於 2048 到 3072 之間的值,即可調整應用程式可用的位址空間量,以增加系統可用的位址空間量。 當應用程式需要超過 2 GB 但少於 3 GB 的位址空間時,這有助於維護整體系統效能。
若要讓應用程式使用較大的位址空間,請在影像標頭中設定 IMAGE_FILE_LARGE_ADDRESS_AWARE 旗標。 Microsoft Visual C++隨附的連結器支援/LARGEADDRESSAWARE參數來設定此旗標。 設定此旗標,然後在沒有 4GT 支援的系統上執行應用程式應該不會影響應用程式。
在 64 位版本的 Windows 上,以 IMAGE_FILE_LARGE_ADDRESS_AWARE 旗標標示的 32 位應用程式有 4 GB 的位址空間可用。
Windows Server 2003 的 Itanium 版本: 在 SP1 之前,32 位進程只有 2 GB 的位址空間可用。
使用下列指導方針來支援應用程式中的 4GT:
- 接近 2 GB 界限的位址通常會由各種系統 DLL 使用。 因此,即使整個 4 GB 位址空間可用,32 位進程也無法配置超過 2 GB 的連續記憶體。
- 若要擷取使用者虛擬空間總數,請使用 GlobalMemoryStatusEx 函 式。 若要擷取可能的最高使用者位址,請使用 GetSystemInfo 函式。 一律在執行時間偵測實際值,並避免使用硬式有線常數定義,例如:
#define HIGHEST_USER_ADDRESS 0xC0000000
。 - 避免使用指標進行已簽署的比較,因為它們可能會導致應用程式在已啟用 4GT 的系統上當機。 下列條件對高於 2 GB 的指標而言為 false:
if (pointer > 40000000)
。 - 啟用 4GT 時,針對應用程式定義用途使用最高指標位的程式碼將會失敗。 例如,如果 32 位字位於0x80000000下方,則可能會將 32 位字視為使用者模式位址,並在上述的情況下視為錯誤碼。 這不適用於 4GT。
VirtualAlloc 通常會在高位址之前傳回低位址。 因此,除非進程配置大量記憶體或具有分散的虛擬位址空間,否則您的進程可能不會使用非常高的位址。 若要強制配置在較低位址之前從較高位址配置以供測試之用 ,請在呼叫VirtualAlloc 或將下列登錄值設定為 0x100000 時指定MEM_TOP_DOWN:
\ HKEY_LOCAL_MACHINE系統\CurrentControlSet\控制\會話管理員\記憶體管理\AllocationPreference
相關主題