共用方式為


4 GB 微調:BCDEdit 和 Boot.ini

在 32 位版本的 Windows 上,應用程式有 4 GB 的虛擬位址空間可用。 虛擬位址空間會分割,讓應用程式可以使用 2 GB,而其他 2 GB 只能供系統使用。 使用 BCDEdit /set increaseuserva 命令啟用的 4 GB 調整功能(4GT 或 4GT RAM Tuning),可將應用程式可用的虛擬位址空間增加到 3 GB,並將系統可用的虛擬位址空間減少為 1 GB 至 2 GB。

對於需要大量記憶體的應用程式,例如資料庫管理系統 (DBMS),使用較大的虛擬位址空間可提供相當大的效能和延展性優勢。 不過,檔案快取、分頁集區和非分頁集區較小,這可能會對具有大量網路或 I/O 的應用程式造成負面影響。 因此,您可能會想要在負載下測試應用程式,並檢查性能計數器,以判斷您的應用程式是否受益於較大的地址空間。

若要啟用 4GT,請使用 BCDEdit /set 命令,將 increaseuserva 開機項目選項設定為介於 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 時指定 MEM_TOP_DOWN,或將下列登錄值設定為 0x100000:

HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Memory Management\AllocationPreference

Windows 版本的記憶體限制

實體位址擴充功能

4GT 技術參考