我正在使用 Delphi XE2,我必須撰寫一個需要一些常量陣列的函式。如果我在函式中宣告這些,它們什么時候會被創建?每次函式運行時還是只運行一次?
例子:
function Something;
const
Arr: array[0..100] of string = ('string1', 'string2'...);
begin
end;
uj5u.com熱心網友回復:
在行程的生命周期內,該陣列將在行程記憶體中占據一個固定的、恒定的區域。
實際上,您可以很容易地看到自己:

每次計時器觸發時,您都會發現它Pointer(@Arr)具有相同的值,并且在記憶體中的那個點上,您會找到您的常量陣列。
如果您使用“記憶體”面板更改它(如string1)orange1,更改將持續存在。
uj5u.com熱心網友回復:
只是為了詳細說明 Andreas Rejbrand 的回答......
如果您宣告一個區域常量,即使您多次宣告相同的值,它也會保留在編譯中。這些常數將是獨立的。換句話說,如果你寫:
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;
您將在編譯后的代碼中獲得兩組“string1”和“string2”。如果您在一個函式中(在檔案或記憶體中)將一個“string1”更改為“orange1”,另一個“string1”將保持不變。沒有編譯器優化來“統一”這些常量。
除了浪費代碼之外,如果您兩次宣告了相同的常量,如果您在一個地方更改代碼而忘記檢查其他地方,它可能會變得一團糟。
總之,如果您的程式中有多個地方使用常量,請始終考慮將它們宣告為全域(或在單元范圍內)而不是本地。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516711.html
