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

看板C_and_CPP (C/C++)作者 (larkes)時間8年前 (2017/07/20 01:03), 編輯推噓1(1015)
留言16則, 5人參與, 最新討論串1/1
假設我有一個函式 ,函式的程式碼如下: 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

07/20 01:10, , 1F
這個不會被釋放吧,反正都在stack
07/20 01:10, 1F

07/20 01:27, , 2F
釋放這個詞不夠精確 沒有指名釋放的對象
07/20 01:27, 2F

07/20 01:27, , 3F
如果對象是作業系統的話 答案是否定的
07/20 01:27, 3F

07/20 01:28, , 4F
但是如果對象是 stack pointer 的話 在理想的情況下
07/20 01:28, 4F

07/20 01:29, , 5F
sp 會升回較高的記憶體地址 如果這個時候再遇到了
07/20 01:29, 5F

07/20 01:30, , 6F
下一個小區塊 很可能用到的空間就會是前一個區塊的
07/20 01:30, 6F

07/20 01:31, , 7F
你可以做實驗 下一個區塊不初始化 直接去讀裡面的值
07/20 01:31, 7F

07/20 01:32, , 8F
雖然沒有保證一定會如我所說的 但是有很高的機率是
07/20 01:32, 8F

07/20 01:39, , 9F
嗯... 剛剛試了一下 寫不出 MWE... 編譯器太聰明惹~
07/20 01:39, 9F

07/20 08:22, , 10F
@johnjohnlin: 謝謝喔!
07/20 08:22, 10F

07/20 08:23, , 11F
@Hazukashiine: 謝謝你詳細的描述,
07/20 08:23, 11F

07/20 08:24, , 12F
最後一句"MWE"是什麼意思呢?
07/20 08:24, 12F

07/20 09:04, , 13F
記得沒錯的話,不會釋放,要到函數結束才會釋放
07/20 09:04, 13F

07/20 11:21, , 14F
MWE = minimal working example
07/20 11:21, 14F

07/20 15:45, , 15F
stack 有啥放不放的?
07/20 15:45, 15F

07/21 07:34, , 16F
@wudidog,@Hazukashiine 謝謝囉!
07/21 07:34, 16F
文章代碼(AID): #1PRv3s4k (C_and_CPP)
文章代碼(AID): #1PRv3s4k (C_and_CPP)