变量a和b的内存管理有什么区别?
它们都是相似的静态变量,但b的可见性是本地的吗?
在程序或函数中声明静态变量是否可以?
const
a: string = 'aaa';
procedure SubMethod;
const
b: string = 'bbb';
begin
a := a + 'a';
b := b + 'b';
end;
答案 0 :(得分:6)
是的,它们是一样的。从反汇编中可以看出,'a'和'b'存在于顺序存储器位置:
Unit26.pas.32: a := a + 'a';
004552C8 B814874500 mov eax,$00458714
004552CD BAF0524500 mov edx,$004552f0
004552D2 E809F8FAFF call @LStrCat
Unit26.pas.33: b := b + 'b';
004552D7 B818874500 mov eax,$00458718
004552DC BAFC524500 mov edx,$004552fc
004552E1 E8FAF7FAFF call @LStrCat
就我而言,@ a = $ 00458714,@ b = $ 00458718。
但是,请注意,您必须启用Assignable typed constants设置来编译此类代码。
如果您未启用此设置,则必须将“b”移出程序。以下代码无法编译。
var
a: string = 'aaa';
procedure SubMethod;
var
b: string = 'bbb'; // <-- compilation stops here
begin
a := a + 'a';
b := b + 'b';
end;