.. wenn Du ein dynamisches Array nimmst, das kommt auf den Heap
Insbesondere kommt es in kleineren Blöcken. Lediglich die letzten
array of Integer
werden jeweils als ein Block benötigt. Alle anderen enthalten Pointer auf die Sub-Arrays.
Arbeitsspeicher ist genug vorhanden (ca. 196 GB
Ram)
Das kommt darauf an ob es eine 32 oder 64-Bit Anwendung ist. Bei 32-Bit kann der Heap auch nicht den Hauptspeicher voll ausnutzen. Mit 400 MB in Blöcken von max. 40KB bist du aber wohl noch im grünen Bereich.
Delphi-Quellcode:
type
PMyArray = ^TMyArray;
TMyArray = array [0..1000] of array [0..10] of array [0..10000] of integer;
Das würde ich nicht empfehlen, da das weiterhin ein zusammenhängendes Array erzeugt - lediglich auf dem Heap. Das kann unter
Win32 bei 400MB schon engwerden.
Mal abgesehen davon ließe sich das sowieso auch deutlich einfacher schreiben:
TMyArray = array[0..1000, 0..10, 0..10000] of integer;
Besser wäre sowas:
Delphi-Quellcode:
type
TMyArray = array of array of array of Integer;
procedure Test;
var
arr: TMyArray;
begin
SetLength(arr, 1001, 11, 10001);
...
end;