我很好奇动态数组可以有多长,所以我尝试了
SetLength(dynArray, High(Int64));
其值为 9,223,372,036,854,775,807,我认为这将是我可以引用的最大数量的索引。它给了我一个:
ERangeError with message 'Range check error'.
所以我尝试了:
SetLength(dynArray, MaxInt);
并得到同样的错误!
有趣的是我可以用它来调用
SetLength(dynArray, Trunc(Power(2, 32));
这实际上是 MaxInt 大小的两倍!
我试过了
SetLength(dynArray, Trunc(Power(2, 63) - 1));
与 High(Int64) 相同,但也失败了。
如果没有不断的尝试和错误,有人知道最大尺寸吗?它取决于数组中元素的大小吗?
我使用的是Delphi 2009。不同版本会有不同吗(显然当Commadore出来时应该会更大!)
最佳答案
从 System.DynArraySetLength 过程的第 20628 行开始,答案很清楚:
Inc(neededSize, Sizeof(Longint)*2);
if neededSize < 0 then
Error(reRangeError);
因此,理论上,在不引发范围检查错误的情况下可以分配的最大值为 Maxint - SizeOf(Longint) * 2。实际上,根据可用内存量,您将收到内存不足错误。
关于delphi - Delphi 中动态数组的最大长度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/985015/