當前位置:編程學習大全網 - 行動軟體 - 北大青鳥java培訓:堆和棧的區別?

北大青鳥java培訓:堆和棧的區別?

棧:在編譯過程中分配的內存空間是由操作系統(編譯器)自動分配和釋放的,而堆棧上的空間是有限的。

在編譯過程中,程序在堆棧上同時為變量和函數分配內存,並且在堆棧上執行運行時函數調用的參數傳遞。

堆:在程序運行期間動態分配的內存空間,您可以根據程序運行的方式來確定要分配的堆內存的大小。

發行版通常由程序員分配。

內存函數的分配,如new和malloc,分配給堆。

棧是機器系統提供的數據結構,堆由C/c++函數庫提供。

棧是系統提供的功能,其特點是快速高效,缺點是有限的,數據不靈活;該堆棧是函數庫的函數,具有靈活性和方便性的特點,數據被廣泛使用,但效率可以降低。

棧是系統數據結構,它是流程/線程的唯壹。

堆是函數庫的內部數據結構,不壹定是唯壹的。

不同堆分配的內存不能相互操作。

堆棧空間有兩種靜態分布和動態分配。

靜態分配由編譯器完成,例如自動變量(自動)分布。

動態分配由alloca函數完成。

棧的動態分配不需要釋放(自動),也沒有釋放函數。

對於便攜程序,不鼓勵動態分配堆棧。

堆空間分配是動態的,雖然在程序的末尾,所有的數據空間都將被釋放回系統中,但是精確的應用程序內存/空閑內存匹配是良好應用程序的基本要素。

堆內存用於保存由新分配的內存在堆中創建的對象和數組,並由虛擬機的自動垃圾收集器管理。

創建了壹個數組或對象在堆中,堆棧可以也是壹個特殊的變量,讓棧中這個變量的值等於數組或對象在堆內存地址,棧中的變量是壹個數組或對象的引用變量,它可用於程序後引用變量來訪問堆中的堆棧數組或對象,引用變量是壹個數組或對象名稱。

引用變量是在定義時在堆棧中分配的普通變量,並且在程序超出其範圍後會釋放引用的變量。

河北電腦培訓/發現和數組在堆中分配和對象本身,即使您的應用程序是使用新的數組或對象聲明的壹個代碼塊,數組和對象本身占用內存不會被釋放,數組和對象沒有引用變量指向它,成為壹種浪費,不在使用,但仍占據內存空間,其次是垃圾收集器在壹個不確定的時間。

  • 上一篇:生活善待自己的句子
  • 下一篇:人到底有沒有前世?
  • copyright 2024編程學習大全網