2013-10-11 131 views
0

通常,函數中聲明的局部變量在堆棧上分配,而不是在堆上分配,但如果變量是靜態的,則不是這種情況。爲什麼不能在堆棧上分配一個靜態類變量 ?爲什麼不能將靜態類變量分配給堆棧?

+2

在這個問題中,以及在一些提供的答案中使用術語「堆棧」,如果不是推定的話,是有趣的。該標準定義了您所稱的「自動」變量或自動存儲。實際上,標準中「堆棧」的唯一用法是''標準庫容器和對異常條件和析構函數觸發函數調用行爲的引用,稱爲「堆棧展開」(15.2)。老實說,對於你的問題或答案來說,這不是一個正確的術語。 – WhozCraig

+0

@WhozCraig在我自己的答案中,我沒有使用'堆棧'這個詞,但我不在乎這個評論的光顧口氣,並且作爲一個編譯器編寫者說我發現內容僅僅是一個狡辯。 – EJP

+0

@EJP這不是爲了你的照顧,而不是批准。這意味着要明白,每個標準的自動存儲概念並沒有歸結爲「堆棧」的所有常見假設。它完全實現了它,並且作爲23年來更好的編譯器工程師,我參加了幾個*不使用傳統模型的實現。你當然可以自由地認爲它僅僅是一個狡辯,但我自己和標準委員會都不這麼認爲,我們都有資格接受我們的意見。 (和你的答案+1,既簡短又不可爭辯)。 – WhozCraig

回答

1

本地靜態變量的生命週期是整個程序,但堆棧被所有函數使用,重用並在多個函數調用中再次使用。因此,靜態本地變量不能與其他局部變量一起存儲在堆棧中。

3

因爲它不會是靜態的。你的問題體現了矛盾。

2

堆棧中分配的變量會自動刪除。你不想要一個靜態變量被刪除。

相關問題