procedure TForm1.btn1Click(Sender: TObject);
var
i:int64;
x:array of int64;
intS:int64;
begin
i:=1000000000;
setlength(x,i); //此處報錯
intS:=gettickcount;
Randomize;
i:=0;
while i<= high(x) do
begin
x[i]:=random(high(x)+1);
i:=i+1;
end;
intS:=gettickcount-ints;
lbl1.Caption:='用時'+inttostr(ints)+'毫秒';
end;

uj5u.com熱心網友回復:
1G個Int64也就是至少8G記憶體才夠放.如果你是32位作業系統至少作業系統給每個行程的記憶體只有2G或者3G(開了PAE模式)
如果是64位系統,你的物理記憶體也沒這么大.
而你這里setlength報Range錯主要是因為超出了動態陣列的大小,動態陣列32位系統最多是2G記憶體
neededSize := newLength*elSize;//32位系統下neededSize 是32位整數,你這個超出了最大數,就變成負數.后面那句就會拋例外.
if neededSize div newLength <> elSize then
Error(reRangeError);
uj5u.com熱心網友回復:
setlength(x,i); i為Integeruj5u.com熱心網友回復:
x:array of int64; 報錯Range check Error
x:array of integer; 報錯Range check Error
x:array of smallint; 報錯out of memory
同樣是超出記憶體,為何前二者報 range check error 而后者報 out of memory
uj5u.com熱心網友回復:
x:array of integer; 報錯Range check Errorx:array of smallint; 報錯out of memory
x:array of byte; 正常
個人理解,第一種可能是語法檢查層面的錯誤
第二種是語法通過但分配記憶體時發現不足
uj5u.com熱心網友回復:
跟記憶體大小有關轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/101772.html
標籤:語言基礎/算法/系統設計
上一篇:ExpressSpreadSheet如何直接呼叫存在SqlServer資料庫中的Excel檔案
下一篇:dcp檔案中包含什么內容?
