Ich schreibe momentan an einem Pascal-Programm (keine Application), welches große Mengen Speicher frisst. Plattform ist Win32, Lazarus Version siehe Signatur. Problem: Das Programm läuft mit einer kleineren Datenmenge einwandfrei, bis ich es auf die große Datenmenge loslasse, da gibt es dann plötzlich bei einem Speicherbedarf von etwa 1GB (laut TaskManager) einen "RunError(203)". Die gesamten Daten sind in einem dynamischen Array gespeichert, jedes einzelne Datum ist eine Klasse von 32Byte Instance Size (TNode, siehe unten) zuzüglich ein paar Strings (TTag) bisher noch nicht in Gesamtheit bestimmter Größe. Klicke ich nach dem Fehler wieder auf Run, kommt ein Fehler "EOutOfMemory". Nach nochmaligem klicken auf Run, gibt mein Programm im finally-Block aus, dass 19316724 Einträge im Array sind (entspricht 618135168 Byte plus den Strings, könnte insgesamt durchaus 1GB ergeben). Momentan läuft das Programm ohne die Strings, dann kann man die Gesamtgröße genau bestimmen.
Gibt es eine Beschränkung auf 1GB, die hier greift?
Code: Alles auswählen
TTag = record
Key: String;
Value: String;
end;
TWay = class;
TNode = class
public
ID: LongWord;
Lat: Double;
Lon: Double;
Ways: array of TWay; // bleibt momentan noch leer
Tags: array of TTag;
end;