作者larkes (larkes)
看板C_and_CPP
標題[問題]區域變數的記憶體釋放
時間Thu Jul 20 01:03:47 2017
假設我有一個函式 ,函式的程式碼如下:
int function()
{
//小區塊:
{
int my_array[100] = {0};
}
return 0;
}
從上述的程式碼可知, my_array是宣告在一個小區塊裡面.
我的問題是:
當程式執行小區塊的時候,它應該會配置一個連續的記憶體空間
用來存放my_array的所有元素.
那程式離開那個小區塊之後,
是不是在function()還沒return之前,雖然我們不能使用my_array了,
但是my_array佔用的記憶體空間還存在嗎?
還是說一離開這個小區塊, my_array的記憶體空間就馬上被釋放了,
不需要等到function()做return呢?
不好意思,謝謝指教!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.177.11.187
※ 文章網址: https://webptt.com/m.aspx?n=bbs/C_and_CPP/M.1500483830.A.12E.html
1F:→ johnjohnlin: 這個不會被釋放吧,反正都在stack 07/20 01:10
2F:→ Hazukashiine: 釋放這個詞不夠精確 沒有指名釋放的對象 07/20 01:27
3F:→ Hazukashiine: 如果對象是作業系統的話 答案是否定的 07/20 01:27
4F:→ Hazukashiine: 但是如果對象是 stack pointer 的話 在理想的情況下 07/20 01:28
5F:→ Hazukashiine: sp 會升回較高的記憶體地址 如果這個時候再遇到了 07/20 01:29
6F:→ Hazukashiine: 下一個小區塊 很可能用到的空間就會是前一個區塊的 07/20 01:30
7F:→ Hazukashiine: 你可以做實驗 下一個區塊不初始化 直接去讀裡面的值 07/20 01:31
8F:→ Hazukashiine: 雖然沒有保證一定會如我所說的 但是有很高的機率是 07/20 01:32
9F:→ Hazukashiine: 嗯... 剛剛試了一下 寫不出 MWE... 編譯器太聰明惹~ 07/20 01:39
10F:→ larkes: @johnjohnlin: 謝謝喔! 07/20 08:22
11F:→ larkes: @Hazukashiine: 謝謝你詳細的描述, 07/20 08:23
12F:→ larkes: 最後一句"MWE"是什麼意思呢? 07/20 08:24
13F:推 wudidog: 記得沒錯的話,不會釋放,要到函數結束才會釋放 07/20 09:04
14F:→ Hazukashiine: MWE = minimal working example 07/20 11:21
15F:→ dou0228: stack 有啥放不放的? 07/20 15:45
16F:→ larkes: @wudidog,@Hazukashiine 謝謝囉! 07/21 07:34