[問題]區域變數的記憶體釋放

作者: larkes (larkes)   2017-07-20 01:03:47
假設我有一個函式 ,函式的程式碼如下:
int function()
{
//小區塊:
{
int my_array[100] = {0};
}
return 0;
}
從上述的程式碼可知, my_array是宣告在一個小區塊裡面.
我的問題是:
當程式執行小區塊的時候,它應該會配置一個連續的記憶體空間
用來存放my_array的所有元素.
那程式離開那個小區塊之後,
是不是在function()還沒return之前,雖然我們不能使用my_array了,
但是my_array佔用的記憶體空間還存在嗎?
還是說一離開這個小區塊, my_array的記憶體空間就馬上被釋放了,
不需要等到function()做return呢?
不好意思,謝謝指教!
作者: johnjohnlin (嗯?)   2017-07-20 01:10:00
這個不會被釋放吧,反正都在stack
作者: Hazukashiine (私は幸せです)   2017-07-20 01:27:00
釋放這個詞不夠精確 沒有指名釋放的對象如果對象是作業系統的話 答案是否定的但是如果對象是 stack pointer 的話 在理想的情況下sp 會升回較高的記憶體地址 如果這個時候再遇到了下一個小區塊 很可能用到的空間就會是前一個區塊的你可以做實驗 下一個區塊不初始化 直接去讀裡面的值雖然沒有保證一定會如我所說的 但是有很高的機率是嗯... 剛剛試了一下 寫不出 MWE... 編譯器太聰明惹~
作者: larkes (larkes)   2017-07-20 08:22:00
@johnjohnlin: 謝謝喔!@Hazukashiine: 謝謝你詳細的描述,最後一句"MWE"是什麼意思呢?
作者: wudidog (嗚啦啦)   2017-07-20 09:04:00
記得沒錯的話,不會釋放,要到函數結束才會釋放
作者: Hazukashiine (私は幸せです)   2017-07-20 11:21:00
MWE = minimal working example
作者: dou0228 (7777)   2017-07-20 15:45:00
stack 有啥放不放的?
作者: larkes (larkes)   2017-07-21 07:34:00
@wudidog,@Hazukashiine 謝謝囉!

Links booklink

Contact Us: admin [ a t ] ucptt.com