堆栈能使用的大小在PE头中定义。code
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。it
为保险起见,须要本身安装SEH handler,避免因扩展堆栈出错致使程序崩溃,如下:class