Win64 hat eine etwas andere Speicherverwaltung und außerdem haben sich einige System-DLLs verändert, womit diese auch noch etwas mehr
RAM belegen können.
Allein schon die größeren Dateien vrauchen zwar nicht mehr physischen
RAM, aber im virtuellen Arbeitsspeicher wird dennoch mehr Platz belegt.
Wie sah denn die Speicherauslastung auf dem alten System aus?
Waren da die 2 GB auch schon fast randvoll?
Du mußt dir unbedingt klar machen, daß es einen Unterschied zwischen physischem
RAM, Auslagerungsdatei (Pagefile) und virtuellem Speicher gibt.
Im System sind vielleich x GB an
RAM verbaut und dazu kommt dann noch die Auslagerungsdatei.
Somit hat man zusammen x GB für alle Programme zur Vergügung.
Dein Programm besitzt aber bei 32 Bit nur 2 GB virtuellem
RAM (3 GB, wenn man eine gewisse Option aktiviert, im Windows
und in der EXE).
Maximal kann von den 2 GB aber nur soviel belegt werden, wie physisch (
RAM+Pagefile) zur Verfügng stehen (frei sind).
In diesen 2 GB gibt es dann noch Bereiche, wo man nichts ablegen kann (die ersten 64 KB) und dann liegen auch noch überall die gemappten Teile der DLLs und der EXE (z.B. Programmcode und Resourcen), welche meistens direkt von der Festplatte im virtuellen Speicher abgebildet sind, aber keinen physischen
RAM belegen (das selbe gilt für MMF) und dann können Programme gleiche DLLs/EXEn sich teilen, womit diese nur einmal für Alles im physischem
RAM liegen und nur in den Virtuellen reingemappt werden.
Und der Restliche virtuelle Speicher ist quasi dich. Aber auch da kann man nur speicher reservieren, wenn man ein Stückchen findet, das groß genug ist.
Will man z.B. ein Array mit 1 GB erstellen, dann braucht man dafür einen Speicherblock, welcher
zusammenhängend mindestens 1 GB groß ist, was nicht so einfach wird, wenn wild verteilt sonstwas darin rumliegt.