Freigeben über


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

Standardmäßig verfügen 64-Bit-Microsoft Windows-basierte Anwendungen über einen Benutzermodusadressraum von mehreren Terabytes. Genaue Werte finden Sie unter Speicherbeschränkungen für Windows- und Windows Server-Versionen. Anwendungen können jedoch angeben, dass das System den gesamten Arbeitsspeicher für die Anwendung unter 2 Gigabyte zuweisen soll. Dieses Feature ist für 64-Bit-Anwendungen von Vorteil, wenn die folgenden Bedingungen zutreffen:

  • Ein Adressraum von 2 GB reicht aus.
  • Der Code enthält viele Zeigerabkürzungswarnungen.
  • Zeiger und ganze Zahlen werden frei gemischt.
  • Der Code verfügt über Polymorphie unter Verwendung von 32-Bit-Datentypen.

Alle Zeiger sind weiterhin 64-Bit-Zeiger, das System stellt jedoch sicher, dass jede Speicherzuweisung unter dem Grenzwert von 2 GB erfolgt, sodass beim Abschneiden der Anwendung ein Zeiger keine signifikanten Daten verloren gehen. Zeiger können auf 32-Bit-Werte abgeschnitten und dann bis zu 64-Bit-Werte durch Sign-Erweiterung oder Nullerweiterung erweitert werden.

Um diese Speicherbeschränkung anzugeben, verwenden Sie die Option /LARGEADDRESSAWARE:NO Linker. 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 wird von einer Anwendung aufgerufen, die diese Option nicht verwendet, könnte die DLL einen 64-Bit-Zeiger abschneiden, dessen obere 32 Bit signifikant sind. Dies kann zu Anwendungsfehlern ohne Warnung führen.