PS: Speicherdefragmentierung gibt's auch noch.
du hast z.B.
- maximal 2 GB virtuellen Speicher verfügbar
- gnügend physischen
RAM + Auslagerungsdatei
- aber einen voll defragmentierten virtuellen Speicher (es liegen da ja auch noch über DLLs und so'n Zugs rum)
Wird ein dyn. Array in seiner größe geändert, dann wird/muß eventuell das Array umkopoert werden, weil es nicht Inplace vergrößert werden kann (liegt schon was Anderes dahinter).
Nun brauchst du also:
a) irgendwo ein Stückchen freien Speicher, wo die neuen Arraydaten reinpassen
b) zwischenzeitlich auch mal bis zu doppelt soviel Speicher für das Array (neuer + alte Daten)
[add]
ich sage standardmäßig.
Und es sind etwa 3,75 GB an virtuellen
RAM, den Rest kann man mit 32 Bit nicht verwalten und eingige Bereiche wurden wohl aus Kompatibilitätsgründen (zur 31-Bit-signed-Adressierung) gesperrt.
Mein Windows 32 Bit stellt z.B. nur 3,24 zur Verfügung (Integergrenzen und so) und der Rest wird entweder für Treiber werwendet und alles über 4 GB ist eh nicht adressierbar (abgesehn vom LAA / Large-Address-Aware, aber das muß aktiviert sein, das
OS muß es unterstützen und deine Anwendung müßte es selbst behandeln)