㈠ 函數里的局部變數在函數退出後會不會自動釋放
會自動釋放,指針也是一樣的。
局部變數的作用域是定義該變數的函數或定義該變數的復合語句。只在定義它的函數或復合語句范圍內有效,只能在定義它的函數或復合語句內才能使用它們。局部變數的生存期是從函數被調用的時刻算起到函數返回調用處的時刻結束。
(1)棧上的數據什麼時候被釋放擴展閱讀:
局部變數的作用域說明:
1、主函數main()中定義的變數也只在主函數中有效,而不能因為在主函數中定義在整個文件或程序中有效。主函數也不能使用其他函數中定義的變數。因為主函數也是一個函數,它與其他函數是平行關系。這一點是與其他語言不同的,應予以注意。
2、不同函數中可以使用相同名字的變數,它們代表不同的對象,分配不同的單元,互不幹擾。例如,上面在f1函數中定義了變數b和c,倘若在f2函數中也定義變數b和c,它們在內存中占不同的單元,互不幹擾。
3、形式參數是屬於被調函數的局部變數。例如上面f1函數中的形參a,也只在f1函數中有效,其他函數可以調用f1函數,但不能引用f1函數中的形參a。
4、在一個函數內部,可以在復合語句中定義變數,這些變數只在本復合語句中有效,這種復合語句也稱為「分程序」或「程序塊」。
㈡ java棧內存中創建的引用所佔用的內存什麼時候釋放
運行完method1()方法後。str引用內存釋放!
㈢ c++遞歸棧釋放規則
c++遞歸棧釋放規則是:
最後調用的棧空間(包括數據空間和其它壓棧信息佔用的空間),最先釋放。
㈣ c++函數執行結束後,會自動釋放棧上的空間,即存放hello world的單元可能被重新寫入數據
釋放不是說清空。這是你理解錯誤。
聲明一個變數或者常量的時候如果你沒有賦值,並不是說哪塊內存區域就是空的(或者全零)。此時只是聲明這塊區域用來存放。並把這塊區域標識為已分配。
當你釋放的時候他也不會去刪除那塊區域的內存的數據。只是把這塊區域標識為未使用,可供使用。
沒有「清空」這個概念,只是釋放。內存釋放後數據任然存在。你用一個相符類型的指針指向被釋放的地址,當該地址的數據還未被其他程序改寫,當然是可以讀取釋放前的數據。
你可以把這個做成循環輸出 p的值。然後啟動一個大型程序。很快你就會看到p的輸出會發生變化。