Delphi中程序的静态变量

pKa*_*ian 1 delphi variables static memory-management const

变量a和b的内存管理有什么区别?

它们是相似的静态变量,但是b的可见性是本地的吗?

在程序或函数中声明静态变量是否可以?

const 
  a: string = 'aaa';

procedure SubMethod;
const 
  b: string = 'bbb';
begin
  a := a + 'a';
  b := b + 'b';
end;
Run Code Online (Sandbox Code Playgroud)

gab*_*abr 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
Run Code Online (Sandbox Code Playgroud)

就我而言,@ 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;
Run Code Online (Sandbox Code Playgroud)