unknown: Stack und Heap

Beitrag lesen

Und du bekommst meistens mehr Speicher, als du eigentlich anforderst. Windows teilt beispielsweise Speicher nur in Portionen von 4kB zu; wenn die Anwendung also 24 Bytes anfordert, bekommt sie 4kB. Das ist aber systemabhängig.

Aber doch nur, wenn eine neue Page angefordert wird. In diese legt der Heapmanager dann solange weitere Variablen rein, bis die Page voll ist.

Das eigentliche Problem unter Windows ist, dass der Heapmanager diesen Speicher für Blöcke kleiner 512k nicht wieder frei gibt, sonder nur decommittet. Allokiert man seinen gesammten eigenen Addrerssraum (2GB unter 32Bit Windows Systemen) mit kleinen Blöcken, gibt diese dann alle wieder frei und versucht dann einen großen Block zu allokieren, geht das schief (unter WinXP SP2 jedenfalls), weil der Heapmanager für kleine Blöcke eine extra Verwaltung hat um die Fragmentierung zu verbessern. Allerdings gibt diese reservierte Pages nicht wieder ans System zurück.

Außerdem ist der Stack bei manchen Rechnerplattformen begrenzt. Auf 16bit-Systemen wie DOS oder Windows 3.x und älter kann der Stack maximal 64kB groß werden, bei 32bit-Systemen kann er theoretisch 4GB umfassen, wenn das OS nicht von sich aus eine Bremse reinhaut.

Der Heap doch auch. Mehr als an Adressraum zur Verfügung steht kann man nicht nutzen.