看板 C_and_CPP 關於我們 聯絡資訊
開發平台(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