2014-02-24 17 views
11

我有一個關於使用全局變量和類的變量使用class var的問題。類在Delphi中使用變量global和變量類

變量聲明與class var

unit Unit1; 

interface 

type 
    TClass = class 
    public 
    class var ObjectList: TObjectList 
    end; 

implementation 
end. 

聲明全局變量:

unit Unit1; 

interface 

var 
    ObjectList: TObjectList 

implementation 
end. 

編譯器如何分配這兩個變量的內存?

+0

值得一提的是'ObjectList'指針將駐留在DATA段中。 –

回答

8

這些變量的實現方式完全相同。 class var是作爲全局變量實現的。這就是模塊中有一個單獨的變量實例,靜態分配。

唯一的區別是class var處於不同的範圍,您可以使用可見性保護說明符(如private)來限制對該變量的訪問。

+1

爲了完全回答他的問題(「編譯器如何爲這兩個變量分配內存?」),這兩個變量的內存分配將位於靜態數據段中。對於引用類型,只有指針在數據段中分配,並且對象空間在運行時以通常方式(在堆上)動態分配。 –

+1

我寧願避免在此討論平臺特定的實現細節。模塊中有一個變量實例。這是需要的心理記憶模型。 –

+0

不夠公平,但他的具體問題是如何爲這些變量分配內存。我認爲一個完整的答案應該至少解決這個問題,即使它提供了一個開放的答案(即:「這取決於平臺」)。 –