Begrenzung Speicherplatzreservierung

flowpow

Grünschnabel
Hallo,

ich möchte unter Windows (32 Bit) en bloc 1.5 GByte und mehr reservieren. Obwohl genügend RAM (6 GB) und eine große Auslagerungsdatei zur Verfügung steht, gelingt mir dies nicht. Mit der Funktion VirtualAlloc konnte ich bisher maximal 1200 MB nutzen. Mir ist die Grenze von 4GB bekannt, auch dass große Bereiche durch das Betriebssystem belegt sind. Aber 2GB müßte doch möglich sein? Oder? Ist jemandem die Grenze von 1200MB bekannt? Kennt jemand die Gründe dafür.

Viele Grüße
flowpow
 
Hallo flowpow,

ausschlaggebend ist nicht die Menge an unalloziertem Speicher, sondern der größte zusammenhängende unallozierte Speicherbereich (der natürlich drastisch kleiner sein kann). Die Auslagerungsdatei und der verfügbare physikalische Speicher haben damit erst mal nichts zu tun, da die Allozierung (zunächst) im virtuellen Adressraum erfolgt. Unter Windows 32-Bit stehen pro Prozess maximal 2GiB (von insgesamt 4GiB) des virtuellen Adressraums zur Verfügung (siehe . Die vollen 4GiB erhält man nicht, weil das Betriebssystem im Adressraum jeden Prozesses (virtuellen) Speicher benötigt für gemeinsam genutzte DLLs, Betriebssystemfunktionen, Verwaltungsstrukturen etc. Man kann die 2GiB noch auf 4GiB erhöhen, wenn man IMAGE_FILE_LARGE_ADDRESS_AWARE aktiviert.

Am besten wäre es aber, wenn du ein ein 64-Bit-Programm auf einem 64-Bit-System verwendest.

Grüße,
Matthias
 
Zurück