4-Gigabyte-Optimierung: BCDEdit und Boot.ini

In 32-Bit-Editionen von Windows verfügen Anwendungen über 4 Gigabyte (GB) virtuellen Adressraum. Der virtuelle Adressraum wird unterteilt, sodass 2 GB für die Anwendung und die anderen 2 GB nur für das System verfügbar sind. Das Mit dem Befehl BCDEdit /set increaseuserva aktivierte Feature zur Optimierung von 4 Gigabyte (4GT oder 4GT RAM-Optimierung) erhöht den virtuellen Adressraum, der der Anwendung zur Verfügung steht, auf bis zu 3 GB und reduziert die für das System verfügbare Menge auf 1 bis 2 GB.

Für anwendungen, die speicherintensiv sind, z. B. Datenbankverwaltungssysteme (DBMS), kann die Verwendung eines größeren virtuellen Adressraums erhebliche Leistungs- und Skalierbarkeitsvorteile bieten. Der Dateicache, der ausgelagerte Pool und der nicht ausgelagerte Pool sind jedoch kleiner, was sich negativ auf Anwendungen mit starkem Netzwerk oder E/A auswirken kann. Aus diesem Grund sollten Sie Ihre Anwendung unter Auslastung testen und die Leistungsindikatoren untersuchen, um zu ermitteln, ob Ihre Anwendung vom größeren Adressraum profitiert.

Um 4GT zu aktivieren, verwenden Sie den Befehl BCDEdit /set , um die Startoption increaseuserva auf einen Wert zwischen 2048 (2 GB) und 3072 (3 GB) festzulegen.

Windows Server 2003 und früher: Um 4GT zu aktivieren, fügen Sie der Datei Boot.ini den Schalter /3GB hinzu. Der Schalter /3GB wird auf den folgenden Systemen unterstützt:

  • Windows Server 2003
  • Windows XP Professional

Der / 3GB-Switch stellt für Anwendungen volle 3 GB virtuellen Adressraum zur Verfügung und reduziert die für das System verfügbare Menge auf 1 GB. Unter Windows Server 2003 kann die Menge des für Anwendungen verfügbaren Adressraums angepasst werden, indem sie den Schalter /USERVA in Boot.ini auf einen Wert zwischen 2048 und 3072 festlegen, wodurch sich der für das System verfügbare Adressraum erhöht. Dies kann zur Aufrechterhaltung der gesamtsystemleistung beitragen, wenn die Anwendung mehr als 2 GB, aber weniger als 3 GB Adressraum benötigt.

Damit eine Anwendung den größeren Adressraum verwenden kann, legen Sie das flag IMAGE_FILE_LARGE_ADDRESS_AWARE im Bildheader fest. Der in Microsoft Visual C++ enthaltene Linker unterstützt den Schalter /LARGEADDRESSAWARE, um dieses Flag festzulegen. Das Festlegen dieses Flags und das anschließende Ausführen der Anwendung auf einem System ohne 4GT-Unterstützung sollte sich nicht auf die Anwendung auswirken.

In 64-Bit-Editionen von Windows verfügen 32-Bit-Anwendungen, die mit dem flag IMAGE_FILE_LARGE_ADDRESS_AWARE gekennzeichnet sind, über 4 GB Adressraum.

Itanium-Editionen von Windows Server 2003: Vor SP1 verfügen 32-Bit-Prozesse über nur 2 GB Adressraum.

Verwenden Sie die folgenden Richtlinien, um 4GT in Anwendungen zu unterstützen:

  • Adressen in der Nähe der 2-GB-Grenze werden in der Regel von verschiedenen System-DLLs verwendet. Daher kann ein 32-Bit-Prozess nicht mehr als 2 GB zusammenhängenden Arbeitsspeicher zuordnen, auch wenn der gesamte 4-GB-Adressraum verfügbar ist.
  • Verwenden Sie die GlobalMemoryStatusEx-Funktion , um die Gesamtmenge des virtuellen Benutzerspeicherplatzes abzurufen. Verwenden Sie die GetSystemInfo-Funktion , um die höchstmögliche Benutzeradresse abzurufen. Erkennen Sie immer den tatsächlichen Wert zur Laufzeit, und vermeiden Sie die Verwendung hart verkabelter Konstantendefinitionen wie: #define HIGHEST_USER_ADDRESS 0xC0000000.
  • Vermeiden Sie Signierte Vergleiche mit Zeigern, da sie dazu führen können, dass Anwendungen auf einem 4GT-fähigen System abstürzen. Eine Bedingung wie die folgende ist false für einen Zeiger, der sich über 2 GB befindet: if (pointer > 40000000).
  • Code, der das höchste Bit eines Zeigers für einen anwendungsdefinierten Zweck verwendet, schlägt fehl, wenn 4GT aktiviert ist. Beispielsweise kann ein 32-Bit-Wort als Benutzermodusadresse betrachtet werden, wenn es sich unter 0x80000000 befindet, und ein Fehlercode, falls oben angegeben. Dies gilt nicht für 4GT.

VirtualAlloc gibt normalerweise niedrige Adressen vor hohen Adressen zurück. Daher verwendet Ihr Prozess möglicherweise keine sehr hohen Adressen, es sei denn, er weist viel Arbeitsspeicher zu oder verfügt über einen fragmentierten virtuellen Adressraum. Geben Sie beim Aufrufen von VirtualAllocMEM_TOP_DOWN an, oder legen Sie den folgenden Registrierungswert auf 0x100000 fest, um Zuteilungen von höheren Adressen vor niedrigeren Adressen zu erzwingen:

HKEY_LOCAL_MACHINE\System\Currentcontrolset\Steuerung\Sitzungs-Manager\Speicherverwaltung\ZuordnungVorschau

Arbeitsspeicherlimits für Windows-Releases

Physical Address Extension

Technische Referenz zu 4GT