Virtueller Adressraum (Programmierhandbuch für 64-Bit-Windows)

Standardmäßig verfügen 64-Bit-anwendungen auf Microsoft Windows-Basis über einen Adressraum im Benutzermodus von mehreren Terabytes. Genaue Werte finden Sie unter Arbeitsspeicherlimits für Windows- und Windows Server-Releases. Anwendungen können jedoch angeben, dass das System den gesamten Arbeitsspeicher für die Anwendung unter 2 GIGABYTE zuordnen soll. Dieses Feature ist für 64-Bit-Anwendungen von Vorteil, wenn die folgenden Bedingungen zutreffen:

  • Ein Adressraum von 2 GB ist ausreichend.
  • Der Code enthält viele Zeigerkürzungswarnungen.
  • Zeiger und ganze Zahlen werden frei gemischt.
  • Der Code verfügt über Polymorphie mit 32-Bit-Datentypen.

Alle Zeiger sind immer noch 64-Bit-Zeiger, aber das System stellt sicher, dass jede Speicherbelegung unterhalb des Grenzwerts von 2 GB erfolgt, sodass keine signifikanten Daten verloren gehen, wenn die Anwendung einen Zeiger abschneidet. Zeiger können auf 32-Bit-Werte abgeschnitten und dann durch die Zeichenerweiterung oder die Nullerweiterung auf 64-Bit-Werte erweitert werden.

Um diese Speicherbeschränkung anzugeben, verwenden Sie die Linkeroption /LARGEADDRESSAWARE:NO . Beachten Sie, dass /LARGEADDRESSAWARE:NO für eine ARM64-Binärdatei ignoriert wird. Beachten Sie jedoch, dass probleme auftreten können, wenn Sie diese Option verwenden. Wenn Sie eine DLL erstellen, die diese Option verwendet, und die DLL von einer Anwendung aufgerufen wird, die diese Option nicht verwendet, kann die DLL einen 64-Bit-Zeiger abschneiden, dessen obere 32 Bits signifikant sind. Dies kann zu Anwendungsfehlern ohne Warnung führen.