Windows Speichermodell
-
Hallo Leute,
hat denn ein Prozess von Anfang an seine 2GB zur Verfügung(intern)
oder werden die erst mit jedem new Aufruf (stückweise) bereitgestellt?
Wenn sie eigentlich schon da sind, dient dann new nur zur internen Verwaltung(rausfinden des Pointers usw).Hat das was mit virtuellem Speicher zu tun, dass Windows nur Resourcen sparen will solange das Programm den Platz nicht wirklich braucht?
schöne Grüße!
-
Jeder gestartete Prozess hat unter Win32 die Illusion, seinen eigenen privaten Speicherbereich von 2GB zur Verfügung zu haben (die unteren 2GB reserviert sich Windows selbst). Zur Laufzeit werden virtuelle Adressen in den physischen Speicher gemapt und vice versa. Du kannst das GAnze auch nachvollziehen, indem du in einer Endlosschleife jeweils bspw. 1024 ints allokierst. Irgendwann gibt dir Windows einfach keinen neuen Speicher mehr.
Übrigens: Auf x64 Systemen liegt die Größe des virtuellen Speichers imho bei 8192GB.
-
Bei der x86 Architektur hat jeder Prozess einen 4 GB großen Adressraum.
I.d.R. werden die unteren 2 GB dem Prozess zur Verfügung gestellt. In der realität steht aber meistens nur ca. 1.7 GB zur freien verfügung, da auch noch andere DLLs in diesem Adressraum geladen werden (z.B. kernel32.dll und ntdll.dll).
Wenn die Anwendung sich als "Large Address Aware" makriert hat, dann stehen Ihr sogar fast 3 GB direkt zur Verfügung.Bei x64 hat jeder Prozess einen logischen Adressraum von 16 TB. Dabei stehen logisch gesehen die untere Hälft dem Programm zur Verfügung (8 TB).
Siehe auch:
http://msdn.microsoft.com/en-us/library/aa366912
http://msdn.microsoft.com/en-us/library/aa366778
-
hi
ja aber 2gb sind für den user mode und 2gb kernel mode !
lowbyte
-
Jochen Kalmbach schrieb:
Bei x64 hat jeder Prozess einen logischen Adressraum von 2^64 Bytes (16 TB). Dabei stehen logisch gesehen die untere Hälft dem Programm zur Verfügung (8 TB).
2^64 Bytes != 16 TB
2^64 Byte = 1.7*10^7 TB
Die Beschränkung auf 8192 GB ist sowohl der momentanen 64 Bit-Hardware als auch zusätzlich noch Windows selbst zuzuschreiben, die diesen möglichen Bereich von 2^64 Byte noch einmal kräftig beschneiden.
-
hi
kräftig ist untertrieben, bei den dimensionen.
lowbyte
-
lowbyte_ schrieb:
ja aber 2gb sind für den user mode und 2gb kernel mode !
Wie geschrieben: Nur wenn die Anwendung *nicht* mit Large-Address-Aware übersetzt wurde. Sonst ist es 3GB zu 1 GB.
-
hi
ja das ist klar.
lowbyte