Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.140 Beiträge
 
Delphi 12 Athens
 
#4

AW: riesengroße Arrays > 2GB

  Alt 2. Jun 2017, 09:56
Eine 32Bit-Anwendung kann übrigens maximal 2 GB Arbeitsspeicher addressieren, mehr geht nicht.
Standardmäßig.
Per PE-Optionen kann man auch 3 bzw. 4GB aktivieren.
Aber selbst damit bleibt die maximale größe des Typs bei 2 GB, aber gibt ja noch anderen Speicherverbrauch im Programm.
Und als letzte Alternative eine 64 Bit-Anwendung.

ABER, in einer 32 Bit-Anwendung ist es schon schwer genug 700MB am Stück zu bekommen.
Stichwort Speicherfragmentierung, da der reservierte Arbeitsspeicher und die geladenen DLLs/EXE verstreut im virtuellen Speicher (RAM) rumliegen.

Und wenn man sowas var frametab: array [1..131072] of tframes; auch noch als lokale Variable verwenden wöllte, dann käme noch dazu, dass diese Variable dann im Stack läge und der ist standardmäßig nur ein paar MB groß.


Das Ding nicht als Array, sondern als verkettete Liste, aber zum Speichersparen vielleicht nicht die elemente verknüpfen, sondern das in "kleineren" Paketen (mehrere kleinere statisches Arrays in einer verketteten Liste oder als mehrdimensionales Array in einem übergeordnetem Array)
Bei deiner Struktur könntest du aber die beiden statischen Arrays in dynamische ändern und schon ist das nicht mehr als ein Stück im RAM, vorallem durch f: array of tfiguren; wird das schon stark aufgeteilt.

Bei der Menge:
* in Dateien auslagern und selber nur den Teil in den RAM holen, der grade nötig ist
* Memory Mapped File (MMF) ... kann man auch ohne Datei komplett im RAM haben, aber icht würde eine Datei empfehlen ... Windows hält dann dennoch viel im Windows File Cache
* Address Windowing Extensions (AWE)
* ...
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu ( 2. Jun 2017 um 09:59 Uhr)
  Mit Zitat antworten Zitat