在Delphi下,在单个程序中声明许多变量是否有任何问题?我知道提示警告不会超过32个变量(至少在XE4上,不知道这在柏林仍然是真的),但是他可以有任何其他问题吗?
例如:
procedure xxx;
var A,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z: single;
A1,b1,c1,d1,e1,f1,g1,h1,i1,j1,k1,l1,m1,n1,o1,p1,q1,r1,s1,t1,u1,v1,w1,x1,y1,z1: single;
begin
...
end;
答案 0 :(得分:3)
Technically?否,
局部变量的数量没有实际限制 局部变量存在于堆栈中,因此受到允许的最大堆栈大小的限制 在Windows上,默认值为1兆字节(尽管应用程序可以在PE标头中覆盖此默认值)。
以下示例说明了这一概念:
program Project1;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils;
procedure LocalVars;
const
tooMany = 1024 * 1024 * 1; //1 MB
var
i: integer;
test: array[0..toomany] of byte;
begin <<-- stack overflow will occur here.
for i := Low(test) to High(test) do begin
test[i]:= 1;
end;
end;
begin
try
LocalVars
except on e:exception do
WriteLn('Fail: '+e.message);
end;
WriteLn('done.');
Readln;
end.
编译器创建的初始化代码将在begin
语句处为(超大)数组创建堆栈空间,从而导致堆栈溢出。
您可以在linking options
(项目 - &gt;选项 - &gt;链接)中增加最大堆栈大小。
我从来没有诉诸过这个黑客,而且我不认识那个人
最大可能的堆栈大小为16 MB。