2008-09-18 26 views

回答

28

存儲類說明控制存儲和您的變量聯動。這兩個概念是不同的。 C爲變量指定以下說明符:auto,extern,register,static。

存儲
存儲時間決定了你的變量將活多久在RAM中。
有三種類型的存儲時間:靜態,自動和動態。

靜態
如果變量是在文件範圍內聲明的,或者與一個外部或靜態符,就會產生靜態存儲。只要程序正在執行,該變量就會存在。沒有執行時間用於創建這些變量。

自動
如果變量中的函數聲明的,但不 extern或static說明符,它具有自動存儲。該變量僅在您執行該功能時存在。一旦你回來,變量不再存在。自動存儲通常在堆棧上完成。創建這些變量是一個非常快的操作(只需按大小遞增堆棧指針)。

動態
如果您使用malloc(或新的C++)使用的是動態存儲。此存儲將存在,直到您撥打免費(或刪除)。這是創建存儲的最昂貴的方式,因爲系統必須動態管理分配和取消分配。

鏈接
鏈接指定誰可以查看和引用變量。有三種類型的聯動:內部聯動,外部聯動和不聯動。

沒有聯繫
這個變量只有在它被宣佈可見。通常適用於在函數中聲明的變量。

內部聯動
這個變量將是該文件(稱爲translation unit)中的所有功能,可見,但其他文件將不知道它的存在。

外部鏈接
該變量對其他翻譯單元可見。這些通常被認爲是「全局變量」。

這裏是描述基於所述指示符

 
    Storage Class Function   File 
    Specifier  Scope    Scope 
----------------------------------------------------- 
    none   automatic   static  
       no linkage  external linkage 

extern   static   static 
       external linkage external linkage 

static   static   static 
       no linkage  internal linkage 

    auto   automatic   invalid 
       no linkage 

register   automatic   invalid 
       no linkage 
+1

也許應該包括翻譯單元細節的額外位,因爲他們不只是文件...他們是源文件加上任何標題包含在他們(但是間接) – workmad3 2008-09-18 19:21:05

+1

哇... +1。需要注意的是「自動」將改變其含義同的C++ 0x:http://en.wikipedia.org/wiki/C%2B%2B0x爲C++ 11 – paercebal 2008-09-18 19:49:20

0

變量存儲類或類型說明符的存儲和連接特性(如易失性,汽車和靜態)定義如何/在變量在程序執行期間保存的表。例如,函數中定義的變量通常保存在堆棧中,這意味着函數返回後它將丟失。使用「static」關鍵字,可以強制編譯器將數據段中的變量放入內存中,從而使變量內容在對該函數的調用之間保持不變。 「register」關鍵字會使編譯器儘可能地將變量放在CPU寄存器中,這對循環中的計數器很有用。但是,並不能保證它實際上在寄存器中。

瞭解更多關於類型說明符here

相關問題