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

标签 delphi delphi-2009

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

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/

相关文章:

delphi - 适用于 Delphi 的通用 MP3 和 WMA 标签阅读器

json - 如何避免解析 ISuperObject 类型字段中的 json 对象

delphi - TJclCompressArchive(绝地项目)。如何选择压缩格式?

Delphi:将对象传输到远程计算机

delphi - 如何添加相框并在图像中插入文字?

Delphi 窗体恢复状态位置和大小

delphi - 在 Delphi 2009 中如何按字母顺序按键列出 TDictionary?

delphi - 如何在 Delphi 2009 中创建最近使用的文件列表?

delphi - 由志愿翻译人员本地化 Delphi 2009 应用程序的流程?

delphi - 这是Delphi 2009中的错误吗?