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)
* ...