Einzelnen Beitrag anzeigen

Benutzerbild von Jaynder
Jaynder

Registriert seit: 2. Dez 2004
Ort: Süderelbe
134 Beiträge
 
Delphi 10.4 Sydney
 
#12

Re: kleine Lücken im Heap optimal verwenden?

  Alt 16. Feb 2010, 13:57
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
  Mit Zitat antworten Zitat