gpt4 book ai didi

delphi - 单个过程可以声明的最大局部变量是多少?

转载 作者:行者123 更新时间:2023-12-02 04:51:13 25 4
gpt4 key购买 nike

在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;

最佳答案

Technically ?不,

局部变量的数量没有实际限制。
局部变量存在于堆栈中,因此受到允许的最大堆栈大小的限制。
在 Windows 上,默认值为 1 MB(尽管应用程序可以覆盖 PE header 中的此默认值)。

以下示例说明了该概念:

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 语句处的(过大的)数组创建空间,从而导致堆栈溢出。

您可以在链接选项(项目->选项->链接)中增加最大堆栈大小。
我从来没有使用过这种方法,而且我不认识任何人使用过这种方法。
最大可能的堆栈大小为 16 MB。

关于delphi - 单个过程可以声明的最大局部变量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40783148/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com