[問題] static 變數在function 中 與 memory

作者: YOUHAVE (YOU HAVE I HAVE)   2014-05-31 22:25:10
開發平台(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):
作者: tjjh89017 (伊達政宗)   2014-05-31 22:54:00
data section在執行的時候就是已經固定了,不會變多或變少((更正compile time
作者: YOUHAVE (YOU HAVE I HAVE)   2014-05-31 22:59:00
是的,這個我了解。我的意思是說,那這樣一是有一堆變數放在那邊,蠻浪費空間的嗎? 好像也沒看過有人在回收他們所以,這樣的行為,是正本來就這樣的瞜? 感謝。
作者: tjjh89017 (伊達政宗)   2014-05-31 23:08:00
本來就是這樣吧
作者: YOUHAVE (YOU HAVE I HAVE)   2014-05-31 23:35:00
恩 謝
作者: EdisonX (卡卡獸)   2014-06-01 07:01:00
程式管理stack是用一個指標,所謂的清除只是將指標移動。
作者: MOONRAKER (㊣牛鶴鰻毛人)   2014-06-01 12:42:00
現在寫程式浪費記憶體的地方多的咧
作者: YOUHAVE (YOU HAVE I HAVE)   2014-06-01 16:04:00
噗噗
作者: witchang   2014-06-08 08:41:00
foo() return 除了rpc跟fp 以外沒有其他東西被釋放, 通常用static變數會一直被用且參考舊值,所以不會是垃圾空間

Links booklink

Contact Us: admin [ a t ] ucptt.com