2-GByte-Grenze

Praxis & Tipps | Tipps & Tricks

Stimmt es, dass 32-Bit-Anwendungen unter Windows nicht mehr als 2 GByte virtuellen Speicher nutzen können?
Grundsätzlich schon, aber es gibt Ausnahmen. Normalerweise teilen die 32-Bit-Versionen von Windows 2000, XP und Vista jedem Programm höchstens einen Adressraum von 231 Byte Größe zu, also 2 GByte. Einige spezielle 32-Bit-Anwendungen können jedoch unter manchen 32-Bit-Windows-Versionen bis zu 3 GByte RAM nutzen und unter x64-Windows bis zu 4 GByte.

Die x64-Versionen von Windows XP und Vista stellen 32-Bit-Applikationen grundsätzlich einen User Mode Virtual Adress Range (UserVA) von 4 GByte Größe zur Verfügung. Die 32-Bit-Server-Versionen von Windows 2000 und 2003, aber auch Windows XP Professional mit Service Pack 2 und Vista lassen sich manuell so einstellen, dass Anwendungen bis zu 3 GByte virtuellen Adressraum erhalten. Dazu dient bei Windows XP Professional und den genannten Server-Versionen die Bootoption /3GB in der boot.ini-Datei:

[Operating Systems]
multi(0)disk(0)rdisk(0)partition(1)\WINNT="Microsoft Windows XP Professional" /fastdetect /3GB

Unter Vista muss man die Boot Configuration Data (BCD) editieren:

BCDEDIT /Set IncreaseUserVa 3072

Die Vergrößerung des UserVA verkleinert den Adressraum des Windows-Kernels, was bei den genannten 32-Bit-Windows-Versionen zu Problemen führen kann. Laut Microsofts Knowledge Base lassen sich möglicherweise einige Treiber nicht mehr laden oder Windows verweigert sogar den Start. Manche dieser Pannen behebt eine leichte Verkleinerung des User-Mode-Adressbereichs, wozu ein zusätzlicher boot.ini-Schalter dient: Mit /Userva=2900 beispielsweise schrumpft der maximale Applikations-Adressraum von 3072 auf 2900 MByte. Bei Vista stellt man die Größe des User-Mode-Adressbereichs mit dem Set-Befehl direkt in Megabyte ein.

Von mehr als 2 GByte Adressraum profitieren ausschließlich solche 32-Bit-Applikationen, die auf diesen Zweck hin programmiert wurden. Außerdem müssen sie mit der Compiler-Option /LargeAddressAware übersetzt worden sein, denn sonst teilt ihnen Windows trotzdem nur 2 GByte zu. Mit den Entwickler-Tools Imagecfg.exe (aus dem Resource Kit Supplement zu Windows 2000 Server) oder Ebitbin.exe (aus Microsoft Visual Studio 2005 ab Standard Edition) soll sich die LargeAddressAware-Kennung auch bei fertigen Programmen ändern lassen.

Welche 32-Bit-Programme tatsächlich mehr als 2 GByte RAM adressieren können, erfährt man nur selten. Microsoft etwa beschreibt das für Exchange Server 2000 sowie SQL Server 2000/2005. Virtualisierungsprogramme wie Vmware nutzen in der 32-Bit-Version ebenfalls bis zu 4 GByte Arbeitsspeicher. Laut Adobe (TechNote 320005) kann Photoshop ab Version CS2 bis zu 3 GByte Speicher nutzen.

Sonst ist der Ausbau des Hauptspeichers auf mehr als 2 GByte Kapazität nur in solchen Ausnahmefällen sinnvoll, bei denen mehrere Applikationen gleichzeitig auf sehr viel Speicher zugreifen. Wer mehr als 2 GByte RAM in seinen PC einbauen will, sollte zudem im Hinterkopf behalten, dass der I/O-Adressraum von Erweiterungskarten normalerweise unterhalb der 4-GByte-Grenze liegt und dort Adressen belegt - in vielen Rechnern sind nicht wesentlich mehr als 3 GByte nutzbar (siehe c't 4/07, S. 176), manchmal sogar weniger. (ciw)