Salut
Quand je fais SetLength(T, N); avec T un tableau dynamique et N > 131072, j'obtiens toujours un tableau de longueur 131072, et cela pour tout les types (array of Byte, array of Integer, etc.). Comment faire pour dépasser cette limite ?
Version imprimable
Salut
Quand je fais SetLength(T, N); avec T un tableau dynamique et N > 131072, j'obtiens toujours un tableau de longueur 131072, et cela pour tout les types (array of Byte, array of Integer, etc.). Comment faire pour dépasser cette limite ?
salut
le buffer maximun de ton tableau est egale
apour connaitre le nombre maximum d’Élément, tu doit donc faireCode:cMaxMemBuffSize = MaxInt-Sizeof(Longint)*2;
Code:MaxElems := cMaxMemBuffSize div SizeOf(TMaStructure);
La limite en Delphi Win32 c'est 2Go de mémoire comme le fait remarquer anapurna
Voir ce sujet, si tu veux allouer un tableau comme en Delphi 3 à base GetMem sur de faux tableau fixe (comme celui de la TList dans les vieilles version de Delphi) ou alors en PByte, PInteger ...
65536 x 2 = 131072
Interessant !
Sous XE2 Win32, ce code de remplissage puis lecture fonctionne parfaitement !
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 var T: array of Integer; I: Integer; K: Int64; begin SetLength(T, 1000000); ShowMessage(IntToStr(Length(T))); K := 0; for I := Low(T) to High(T) do begin Inc(K); T[I] := K; end; K := 0; for I := Low(T) to High(T) do Inc(K, T[I]); ShowMessage(IntToStr(K)); // 1+2+..+1 000 000=1 000 000 x 1 000 001 / 2 = 500 000 500 000; end;
Merci pour les réponses
Il semble que cela marche depuis le début :D. Je me suis trompé à cause du mode de débogage. En effet, si je regarde la taille du tableau T après le SetLength, il ne m'affiche que 131072 éléments :?.