1
17
从System.DynarraySetlength过程,从第20628行可以清楚地找到答案:
因此,在不引起范围检查错误的情况下,可以分配的最大值在理论上是maxint-sizeof(longint)*2。实际上,根据可用内存的多少,您将得到一个内存不足错误。 |
2
4
由于最大实际长度要小得多,因此没有必要推测动态阵列的最大理论长度。 数据结构的大小及其包含的数据必须小于应用程序可以分配的最大内存,减去应用程序代码本身、堆栈和其他数据需要的内存。在Windows上(32位,我们人类目前唯一能用Delphi瞄准的版本),这是一个2 GB的虚拟地址范围,或3 GB的虚拟地址范围,每个应用程序都有一个专用的OS加载程序开关。虽然Delphi应用程序甚至可以处理3G字节的内存空间,但我不确定,因为在所有使用整数而不是长字的地方,最后三分之一的内存空间的偏移量都是负值。
所以您可以尝试分配一个动态数组,比如80%或90%的
另外:给出一个Int64长度并且没有异常并不意味着数组具有预期的长度。考虑此代码:
如果关闭范围检查,则编译时将不带提示和警告,并且运行时不带异常。调用后数组的长度为0,这只是一个小问题。 设置长度() . 因此,对于问题中的检查,您一定要在成功后读取动态数组的长度。 设置长度() ,这是确保编译器和运行时按您的预期执行的唯一方法。 |
3
1
请注意,afaik元素计数也有限,不太可能超过2^31-1。可能是大小有相同的限制(为了避免RTL中的签名<gt;未签名问题),我怀疑即使在/3GB模式下也可能超过2GB。 |
4
1
MMaths:
代码:
例子:
|
Some1Else · 函数在Delphi中重新创建TForm 2 年前 |
Agmcz · Delphi安卓库。so未安装(AAB) 2 年前 |
nader · 如何使用delphi在web上提交表单 6 年前 |
kwadratens · Delphi中的卡方分布函数代码 6 年前 |
user9672569 · 如何在完整的位图图像中绘制阴影效果? 6 年前 |
mmmm · MSBuild(用于Delphi)Make-like功能 6 年前 |