看板 C_and_CPP 關於我們 聯絡資訊
假設我有一個函式 ,函式的程式碼如下: 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://www.ptt.cc/bbs/C_and_CPP/M.1500483830.A.12E.html
johnjohnlin: 這個不會被釋放吧,反正都在stack 07/20 01:10
Hazukashiine: 釋放這個詞不夠精確 沒有指名釋放的對象 07/20 01:27
Hazukashiine: 如果對象是作業系統的話 答案是否定的 07/20 01:27
Hazukashiine: 但是如果對象是 stack pointer 的話 在理想的情況下 07/20 01:28
Hazukashiine: sp 會升回較高的記憶體地址 如果這個時候再遇到了 07/20 01:29
Hazukashiine: 下一個小區塊 很可能用到的空間就會是前一個區塊的 07/20 01:30
Hazukashiine: 你可以做實驗 下一個區塊不初始化 直接去讀裡面的值 07/20 01:31
Hazukashiine: 雖然沒有保證一定會如我所說的 但是有很高的機率是 07/20 01:32
Hazukashiine: 嗯... 剛剛試了一下 寫不出 MWE... 編譯器太聰明惹~ 07/20 01:39
larkes: @johnjohnlin: 謝謝喔! 07/20 08:22
larkes: @Hazukashiine: 謝謝你詳細的描述, 07/20 08:23
larkes: 最後一句"MWE"是什麼意思呢? 07/20 08:24
wudidog: 記得沒錯的話,不會釋放,要到函數結束才會釋放 07/20 09:04
Hazukashiine: MWE = minimal working example 07/20 11:21
dou0228: stack 有啥放不放的? 07/20 15:45
larkes: @wudidog,@Hazukashiine 謝謝囉! 07/21 07:34