【发布时间】:2009-06-12 04:34:46
【问题描述】:
我很好奇动态数组可以有多长,所以我尝试了
SetLength(dynArray, High(Int64));
它的值为 9,223,372,036,854,775,807,我认为这将是我可以参考的最大索引数。它给了我一个:
带有“范围检查错误”消息的 ERangeError。
所以我尝试了:
SetLength(dynArray, MaxInt);
得到了同样的错误!
有趣的是,我可以用它来称呼它
SetLength(dynArray, Trunc(Power(2, 32));
实际上是 MaxInt 大小的两倍!
我试过了
SetLength(dynArray, Trunc(Power(2, 63) - 1));
这与 High(Int64) 相同,但也失败了。
没有持续的反复试验,有人知道最大尺寸吗?是否取决于数组中元素的大小?
我用的是Delphi 2009,不同版本会不会不一样(很明显Commadore出来的时候应该会更好!)
【问题讨论】:
-
您真的期望分配 9 艾字节(或更多)的内存会起作用吗? :)
-
不,我没有,但我很好奇是否会出现内存或范围错误。
-
在 32 位 Delphi 中,
SetLength用于动态数组,采用Integer类型的长度参数。所以试图通过Int64有点毫无意义。我希望编译器会对此发出警告。发生的情况是 64 位整数的最高有效 32 位被截断。
标签: delphi delphi-2009