何时会在Delphi XE2中创建常量?

zvokhttg  于 2022-10-16  发布在  其他
关注(0)|答案(2)|浏览(130)

我使用的是Delphi XE2,我必须编写一个需要一些常量数组的函数。如果我在函数中声明它们,它们将在什么时候创建?函数每次运行时还是只运行一次?
示例:

function Something;
const
  Arr: array[0..100] of string = ('string1', 'string2'...);
begin
end;
fzsnzjdm

fzsnzjdm1#

在进程的生命周期内,该数组将在进程的内存中占据一个固定的恒定区域。
事实上,你可以很容易地看到这一点:

每次计时器触发时,您会发现Pointer(@Arr)具有相同的值,并且在内存中,您会找到您的常量数组。
如果您使用内存面板将其更改(如将string1更改为orange1),更改将持续存在。

ukxgm1gy

ukxgm1gy2#

就安德烈亚斯·雷布兰德的回答做进一步的阐述……
如果您声明了一个局部常量,即使您多次声明相同的值,它也将保留在编译中。这些常量将是独立的。换句话说,如果你写道:

function Something;
const
  Arr: array[0..100] of string = ('string1', 'string2'...);
begin
end;

function Otherhing;
const
  Values: array[0..100] of string = ('string1', 'string2'...);
begin
end;

在编译后的代码中,您将得到两组“字符串1”和“字符串2”。如果您(在文件或内存中)将一个函数中的一个“字符串1”更改为“orange1”,则另一个“字符串1”将保持不变。没有编译器优化来“统一”这些常量。
除了浪费代码之外,如果您将同一常量声明了两次,如果您在一个地方更改了代码,而忘记了检查其他地方,那么它可能会变得一团糟。
总之,如果您的程序中有多个地方要使用常量,请始终考虑将它们声明为全局的(或在单元的作用域中)而不是本地的。

相关问题