[资料] 2015-7-14 日 QDAC 官方群讨论问题整理

本次讨论由逸帆询问数组下标的最大值引起,特记录下供朋友们参考:

 
【码帝】逸帆(39034261) 16:35:45
请问数组最大下标,可以为多大
【码帝】逸帆(39034261) 16:35:53
byte型数组
【码神】[长春]swish(109867294) 16:38:17
array[0..x] of Byte 和array of Byte 是不一样的。array of Byte是在堆上分配,理论上限是你的程序可用剩余内存上限,而array [0..x] of Byte 是在栈上分配,所以不能超过当前栈大小,一般来说是1MB
【码神】[长春]swish(109867294) 16:39:44
不过你可以在Project->Options做出修改
【码帝】逸帆(39034261) 16:40:46
1M?
【码帝】逸帆(39034261) 16:40:50
那也太少了吧
【码神】[长春]swish(109867294) 16:41:16
你以为一个线程的栈会分配多大
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:42:31
@[长春]swish 固定数组这么小?
【码神】[长春]swish(109867294) 16:42:49
你可以试试

1MStack
【码神】[长春]swish(109867294) 16:44:18
1M
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:44:21
@[长春]swish 你赢了
【码神】[长春]swish(109867294) 16:44:39
告诉你不能超你们还不信
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:44:44
dephi为何对固定数组限制?
【码神】[长春]swish(109867294) 16:44:56
不是Delphi的限制
【码神】[长春]swish(109867294) 16:46:31

stackadjust

【码神】[长春]swish(109867294) 16:46:34
这儿限制的
【码神】[长春]swish(109867294) 16:47:03
改成10M后就没事了

10MStack
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:47:49
从没注意过问题
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:47:57
一直也动态数组多
【码神】[长春]swish(109867294) 16:48:04
实际上达不到1M的,因为到你的函数调用时候,前面说不定用了多大呢
【码神】[长春]swish(109867294) 16:48:23
说不定前面栈上的空间已经用了1半了呢
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:49:38
动态数组的内存是连续的吗?
【码神】[深圳]恢弘<tintinsoft@qq.com> 16:49:49
TList就不是,
【码神】[长春]swish(109867294) 16:50:03
连续的
【码神】[长春]swish(109867294) 16:50:31
动态数组实际上是一个结构体,一部分记录数组的长度和维数,另外一块平面内存
【码神】[长春]swish(109867294) 16:51:37
TDynArrayRec = packed record
{$IFDEF CPU64BITS}
_Padding: Integer; // Make 16 byte align for payload..
{$ENDIF}
RefCnt: Integer;
Length: NativeInt;
end;
【码神】[长春]swish(109867294) 16:51:41
这个是它的定义
【码神】[长春]swish(109867294) 16:52:46
也就是说是[Padding][RefCnt][Length][Length长的剩下空间]

分享到: