作者YOUHAVE (YOU HAVE I HAVE)
看板C_and_CPP
標題[問題] static 變數在function 中 與 memory
時間Sat May 31 22:25:10 2014
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
void foo(){
static int x;
}
int main ()
{
foo();
return 0;
}
問題是這樣的。 在foo function 中,static 變數x ,會被放在
memory 的 data section 中(或是有些人說的golable 區域中)。
問題: foo() return 後,從stack 裡移除之後。
1. 就我知道,static 變數x ,仍然還在data section 裡面。
x 位址仍然有效。
2. 如果上面的想法是對的。 那這樣如果一個大程式,
我看很多fucntion 都用static 變數在做事。這樣不是data section 越長越大,
沒人清那些垃圾?這樣是對的嗎?
請教了。
謝謝
餵入的資料(Input):
預期的正確結果(Expected Output):
錯誤結果(Wrong Output):
程式碼(Code):(請善用置底文網頁, 記得排版)
補充說明(Supplement):
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.248.212.6
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1401546312.A.37E.html
※ 編輯: YOUHAVE (111.248.212.6), 05/31/2014 22:26:17
→ tjjh89017:data section在執行的時候就是已經固定了,不會變多或 05/31 22:54
→ tjjh89017:變少((更正compile time 05/31 22:54
→ YOUHAVE:是的,這個我了解。我的意思是說,那這樣一是有一堆變數 05/31 22:59
→ YOUHAVE:放在那邊,蠻浪費空間的嗎? 好像也沒看過有人在回收他們 05/31 23:00
→ YOUHAVE:所以,這樣的行為,是正本來就這樣的瞜? 感謝。 05/31 23:00
→ tjjh89017:本來就是這樣吧 05/31 23:08
→ YOUHAVE:恩 謝 05/31 23:35
推 EdisonX:程式管理stack是用一個指標,所謂的清除只是將指標移動。 06/01 07:01
→ MOONRAKER:現在寫程式浪費記憶體的地方多的咧 06/01 12:42
→ YOUHAVE:噗噗 06/01 16:04
→ witchang:foo() return 除了rpc跟fp 以外沒有其他東西被釋放, 通常 06/08 08:41
→ witchang:用static變數會一直被用且參考舊值,所以不會是垃圾空間 06/08 08:43