有如下代碼:
void A(){int a=1;B();}
void B(){int b=1;A();}
請問在呼叫程序中a,b會被釋放嗎?還是會產生許多區域變數a,b?
感謝!
uj5u.com熱心網友回復:
會釋放,int型別的區域變數是在堆疊中預留的空間。看對應匯編代碼就會徹底明白的。
堆疊中的變數通常包括函式引數和函式里宣告的臨時變數。
堆疊中的基本變數退出其作用域時,沒有誰執行一段代碼去釋放/銷毀/析構它所占用的記憶體,僅僅是沒人再去理會的留在當前堆疊頂上方的若干遺留下來可被后續壓堆疊操作覆寫的無用資料而已。
而堆疊中的類變數退出其作用域時,會自動執行其解構式,……
uj5u.com熱心網友回復:
區域變數在函式結束時記憶體自動釋放uj5u.com熱心網友回復:
區域變數的生命周期是從函式里定義開始,導函式呼叫結束。反復呼叫一個函式時,函式里的區域變數都是一樣的,呼叫幾次就有幾個生命周期
uj5u.com熱心網友回復:
間接遞回也是遞回,一個函式不結束就不釋放它的區域變數,會產生很多a,b的副本,直到溢堆疊。轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/233273.html
標籤:新手樂園
上一篇:C語言多次參考含函式的源檔案
下一篇:keil5代碼出錯問題
