Zitat von
BrightAngel:
-Speicherblock (größe: n*sizeof(TRecordX)) wird angefordert
-TList mit n Pointern auf jeweils ein TRecordX <--die ist mein problem+
-Jetzt KANN es passieren, dass wieder ein Speicherblock wie oben angefordert wird.
-Die Liste "frisst". Nach ein Paar Zyklen ist sie zu groß für den Speicherbereich Folge: sie wird verschoben.
Dieser Bereich ist aber gerade zu Anfangs so klein, dass die zu anfordernten Speicherblöcke zu groß sind, um in die von TList freigewordenen Plätze reinzupassen. Ich habe schon mit dem Gedanken gespielt, ein gleichgroßer Speicherblock standartmäßig für diese Tlist zu verwenden, sodass er später anders verwendet werden kann, aber ist das das Gelbe vom Ei?
[EDIT1]Bzw. Wenn FastMM immer nährungsweise größere Blöcke anfordert, dann ist meine Methode ja auch Kontraproduktiv, weil bei jedem, immer fix bleibendem Block reste entstehen???[/EDIT1]
Würde es mir was bringen, wenn ich einen eigenen Heap extra dafür erschaffen würde??? also via createHeap etc?
Brighty
Auch da mache dir nicht so viele Gedanken. Denn erstens vergrößert sich TList beim Add "intelligent" mit der Methode Grow
Delphi-Quellcode:
procedure TList.Grow;
var
Delta: Integer;
begin
if FCapacity > 64 then
Delta := FCapacity div 4
else
if FCapacity > 8 then
Delta := 16
else
Delta := 4;
SetCapacity(FCapacity + Delta);
end;
und zweitens: wenn du evtl. vorher weißt, dass die Liste sehr groß wird, kannst du sie mit Liste.Capacity := 999999 von vornherein auf einen großen Wert setzen und hinterher evtl. mit Liste.Capacity := Liste.Count wieder reduzieren