Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
25. Okt 2009
Das mit dem Abverlangen kenn ich :oops:
Mein SSF hab ich auch mehrmals zum Test auf 2 Terrabyteplatten losgelassen, was im Normalfall wohl auch keiner so oft macht :nerd:
Und jupp, daß ist genau soein Problem.
Das zweite Array wird vom Speichermanager meißt hinter das Erste gelegt, weswegen für das Erste dann kein/kaum Speicher zur Inplace-Vergrößerung ist und es wieder hinten...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
Ansonsten kommt es nur auf die Verwaltung drauf an ... in nichmal 60 MB bekommt ich locker 'nen großes Verzeichnislistening mit 300.000 Datensätzen/Dateien rein und zu jeder Datei noch 'ne Menge Zusatzinfos (SSF).
Also viele Datensätze bedeuten nicht immer gleich massig Speicherverbrauch.
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
procedure overhead;
var i, zeilen, spalten: integer;
arr: array of record
cont: Pointer;
strs: array of integer;
end;
begin
zeilen := 32000;
spalten := 25;
SetLength(arr, zeilen);
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
klar, denn die Datenplätze (Variablen) sind auch vorhanden, selbst wenn du nichts da reinschreibst :zwinker:
einfache Lösung gegen eine übermäßige Defragmentierung,
denn genau das ist einer der Gründe, warum man nicht unbedingt ein Array oft in seiner Größe verändern sollte:
einfach den gesamten Speicher gleich am Anfang auf Einmal reservieren
und dann die Daten nur noch da reinschreiben.
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
du weißt aber schon, daß ein dynamisches Array schon ein Pointer ist?
Abgesehn davon heißt es noch lange nicht, daß die 80 MB an mehr auch wirklich von dir belegt sind.
Denn es gibt da 2 Arten von Overherad:
- Speicher, welcher wegen Größengruppierung (aufrunden) mitreserviert wurde und nicht mehr nutzbar ist
- Speicher, welcher wegen Gruppenbildung zwar mitreserviert wurde, aber dennoch...
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
korrekt isses eh nicht, denn ich komme auf 3,8 MB (inklusive der Verwaltungsdaten für die Arrays)
procedure möglich(count: integer);
var Arr: array of array of integer;
begin
SetLength(Arr, count);
...
end;
Forum: Object-Pascal / Delphi-Language
Delphi
by himitsu,
24. Okt 2009
Gut, dieses Beispiel liefert auch schon in Delphi 7 "theoretisch" sehr gute Ergebnisse,
> im Durchschnitt weniger als 10 kopiervorgänge
also nicht nur in neueren Delphi-Versionen.
Var A: Array of String;
i, C: Integer;
P: Pointer;
Begin
A := nil;
C := 0;