在Delphi prism中,我们可以声明仅在特殊场合需要的变量.
例如:在棱镜中
If acondition then
begin
var a :Integer;
end;
a := 3; //this line will produce error. because a will be created only when the condition is true
Run Code Online (Sandbox Code Playgroud)
这里'a'不能与3分配,因为它嵌套在分支内.我们如何声明一个只能在delphi win32中的分支内部使用的变量.所以我可以减少内存使用量,因为它只在某个条件成立时才会被创建;
如果减少内存使用不是问题我们有什么缺点(或者我们没有)
Delphi不支持Java中的局部变量声明语句的概念,但您可以声明一个子过程:
procedure foo(const acondition: boolean);
procedure subFoo;
var
a: integer;
begin
a := 3;
end;
begin
If acondition then
begin
subFoo;
end;
end;
Run Code Online (Sandbox Code Playgroud)
你的问题的前提是错误的.您假设在允许块级变量的语言中,当控制进入或离开这些变量的范围时,程序会为这些变量分配和释放内存.因此,例如,您认为何时acondition为真,程序会调整堆栈,以便在a变量进入该块时为变量腾出空间.但你错了.
编译器计算所有声明的变量和临时变量所需的最大空间,然后在进入函数时保留那么多空间.分配该空间就像调整堆栈指针一样简单; 所需时间通常与预留的空间量无关.最重要的是,你的想法实际上不会节省任何空间.
块级变量的真正优势在于它们的范围有限.
如果您确实需要某些变量仅在一个代码分支中有效,那么请将该分支分解为单独的函数并将变量放在那里.
| 归档时间: |
|
| 查看次数: |
1318 次 |
| 最近记录: |