gpt4 book ai didi

delphi - Delphi 中动态数组的最大长度?

转载 作者:行者123 更新时间:2023-12-03 14:55:10 29 4
gpt4 key购买 nike

我很好奇动态数组可以有多长,所以我尝试了

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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com