堆栈能使用的大小在PE头中定义。
s:=GetExePath;
sk:='SizeOfStackReserve';
simath.queryPEInfo(s,sk,i);
sk:='SizeOfStackCommit';
simath.queryPEInfo(s,sk,j);
if j=0 then
j:=4*1024; //默认4K
SizeOfStackReserve:=i-$4000;//经过实践,必须得-16K,否则溢出 //i-j;也不是这个//实际上能扩展的就这么多,否则就会c00000fd stack_overflow
不知道什么原因,能扩展出的:栈顶 - 栈底 = sizeofStackReserve-16K(即:$4000),超出继续push就会导致stack_overflow。
为保险起见,需要自己安装SEH handler,避免因扩展堆栈出错导致程序崩溃,以下: