2012-06-09 104 views
6

我想知道是否可以刪除,即從使用中刪除一個C變量,例如,一旦變量被使用一次?程序運行期間,C變量是否可以隨時刪除或刪除?

我前段時間就這個問題進行了反思,腦海中出現了一個問題。

C具有多種數據類型,我們可以創建數據類型的變量,比如用簡單的代碼整數

int i;

一旦我們以這種方式創建的變量,我們如何「刪除」它如果我們不需要它在未來的使用?

我在網上搜索,但沒有找到任何C命令這樣做。 'k被刪除',我的意思是'k已經不存在'。我的意思是,一旦我們不需要變量,這是一種浪費,應該刪除。

C確實提供了free()函數,但它只適用於使用calloc(), malloc()realloc()分配的內存。

那麼一旦使用了變量,如何刪除一個變量?

回答

13

你不知道。對象的壽命一旦超出範圍就結束(它被稱爲自動對象,因爲它會自動清理)。

例如

void foo() { 
    int j = 3; 

    while (blah) { 
     int i = 5; 
    } 

    // i no longer exists 
} 

// j no longer exists 
+0

謝謝,但是如果一個變量已經用完並仍在範圍內呢?可以刪除嗎? –

+3

@NihalPednekar:不可以。但是您應該記住,編譯器非常擅長優化堆棧使用情況;無論如何,你的大部分局部變量可能永遠不會存在於主內存中! –

+0

我明白了。非常感謝 :) 。 –

5

在C中,有一個對象,這決定了其壽命的存儲持續時間的概念:

  • 靜態存儲用於程序
  • 螺紋的整個執行生命存儲直到線程終止
  • 自動存儲個生活,直到周圍的塊留
  • 分配存儲通過需要明確的去分配free()

分配的存儲空間之外,語言運行時將採取回收內存的護理(如降低堆棧指針放棄呼叫框架,「釋放」自動存儲)。

+0

線程存儲直到尚未被廣泛採用的C11(AFAIK)才存在。 –

+0

通過語言擴展在C11之前存在線程(-local)存儲,例如gcc中的'__thread'和MSVC中的'__declspec(thread)' – Christoph

相關問題