Wie in dem Artikel beschrieben, auf den Sie verweisen, ist der auf einer 32-Bit-CPU verfügbare 4-GB-Adressraum in zwei Teile unterteilt: Benutzermodus oder Anwendungsadressraum und Adressraum im Kernelmodus.
Der Adressraum des Benutzermodus ist pro Prozess. Jeder Prozess weist eine andere Zuordnung zwischen Seiten im Adressraum des Benutzermodus und physischem oder virtuellem Speicher auf.
Der Adressraum im Kernelmodus ist derselbe, unabhängig davon, welcher Prozess gerade ausgeführt wird. Andernfalls müsste der Adressraum bei jedem Übergang in den Kernel-Modus neu zugeordnet werden, was sehr ineffizient wäre. (Der Artikel sagt das, aber nur sehr kurz: "Das Betriebssystem macht seinen virtuellen Speicher im Adressraum jedes Prozesses sichtbar.")
Standardmäßig teilt 32-Bit-Windows dies gleichmäßig auf, 2 GB für Benutzer Platz und 2 GB für Kernel-Speicherplatz, aber es kann so konfiguriert werden, dass es stattdessen 3 GB/1 GB aufteilt.
Auf x64-Windows läuft der Kernel im 64-Bit-Modus, so dass er auf den vollen Adressraum zugreifen kann, der von der CPU erlaubt wird, der aktuell 48 Bit oder 256 TB beträgt. Die ersten x64-Windows-Versionen verwendeten nur 16 TB Adressraum, gleichmäßig aufgeteilt: 8 TB für den Anwendungsadressraum (für 64-Bit-Anwendungen) und 8 TB für den Kernel. In Windows 8.1 wurde dies erhöht, um die gesamten von der CPU erlaubten 256 TB zu verwenden, wiederum gleichmäßig aufgeteilt: 128 TB für 64-Bit-Anwendungen, 128 TB für den Kernel.
32-Bit-Anwendungen werden in der WOW64-Emulationsumgebung ausgeführt, wobei die CPU im Legacy-Modus ausgeführt wird. Der Kernel wird jedoch nie im Legacy-Modus ausgeführt. Wenn ein Kernel-Übergang erforderlich ist, muss die CPU vom Legacy-Modus in den Long-Modus geschaltet werden, was auch bedeutet, dass sie vom 32-Bit-Adressraum zum 64-Bit-Adressraum wechselt. x64-CPUs sind so konzipiert, dass dieser Übergang effizient ist.
Als Ergebnis, keine der 32-Bit-Adressraum für den Kernel reserviert werden muss.
Um Abwärtskompatibilität zu gewährleisten, ist ein 32-Bit-Prozess, dessen ausführbare Datei nicht als große Adresse gekennzeichnet ist, weiterhin auf 2 GB Adressraum beschränkt. Wenn die ausführbare Datei große Adresse bewusst ist, erhält der Prozess alle 4GB.
sollten Sie beachten, dass dies wirklich Adressraum, nicht Speicher oder sogar virtuelle Speicher ist. Eine 32-Bit-Anwendung kann Dateizuordnungen und andere Methoden verwenden, um mehr als 4 GB Arbeitsspeicher zu verwenden.
Sie sollten auch beachten, dass die Tatsache, dass der Prozess Zugang zu 2 GB/3GB/4 GB Adressraum bedeutet nicht, dass die Anwendung all den Platz nutzen können. Windows reserviert in jedem Prozess einen Adressraum für den Benutzermodus für sich.
Adressraum und andere Grenzwerte sind hier dokumentiert: Memory Limits for Windows and Windows Server Releases.
Kernel-Adressraum ist auf x64-Systemen durch dieses Flag nicht betroffen. Es gibt immer noch 8 TB (glaube ich) Adressraum für den Kernel reserviert. –
@MichaelBurr Wow, das habe ich nicht erwartet. Das ist pro Prozess, oder? –
Der Kernel-Adressraum ist nicht pro Prozess. Denken Sie auch daran, dass der blockierte Adressraum nicht unbedingt bedeutet, dass dem gesamten Adressraum tatsächlich Seiten zugeordnet sind. –