Yep. Und das Betriebssystem wird nur dann aufgerufen, wenn die Heap-Verwaltung nicht mehr genug Speicher hat, Ansonsten läuft alles im User-Mode in der RTL.Socke hat geschrieben:Bei der Funktion ReAllocMem steht: Die Adresse kann sich ändern. Es hängt also davon ab, ob am Ende des Arrays noch ausreichend ungenutzter Speicher vorhanden ist. Falls nicht, muss kopiert werden. Beim Anlegen eines Arrays wird jedoch nicht automatisch mehr Speicher allokiert als notwendig. Es wird lediglich auf ganze Blöcke (16 Byte auf 32bit-Systemen und 32 Byte auf 64bit-Systemen) aufgerundet.
Das ist natürlich sinnvoll. " TStringList" ist in der RTL realisiert. Ich finde es erstaunlich dass "Setlength", das auch in der RTL realisiert ist, nicht ebenfalls so arbeitet. (Ist eigentlich einen Feature-Request in Mantis wert.)Socke hat geschrieben:An und für sich ist aber der Programmierer für die Reservierung von zusätzlichem Speicher verantwortlich. Ein schönes Beispeil sind die Standardklassen für Listen (TStringList, TFPList etc.) Dort wird zum Beispiel der verfügbare Platz immer verdoppelt.
-Michael