術語 堆 記憶體 ,棧 記憶體

2021-04-01 19:29:20 字數 867 閱讀 1193

堆表示程式可用的記憶體區,也叫動態記憶體區。堆記憶體的分配與釋放次序是隨機的,這就是說,如果你按次序分配三塊記憶體,那麼到時並不按分配時的次序釋放記憶體。 堆管理器會負責所有操作,你只需簡單地使用getmem 函式請求新記憶體或呼叫constructor 建立物件, delphi 會返回乙個新的記憶體塊(隨意重用已經丟棄的記憶體塊)。

堆是應用程式可用的三種記憶體區之一, 其它兩種分別是全域性記憶體區(存放全程變數) 和棧。與堆相反,全程變數內存在程式啟動時就分配,然後一直保留到程式終止才釋放;棧的內容請詳見術語表。

delphi 使用堆為物件、字串、動態陣列及特殊的動態記憶體請求(getmem)記憶體分配。

windows 應用程式的位址空間最大允許有 2 gigabyte, 其中大部分能被堆使用。

棧表示程式可用的記憶體區,棧記憶體動態分配,並按特定次序分配、釋放。棧記憶體按後進先出次序(lifo)分配,這表示最後分配的記憶體區先被釋放。棧記憶體一般在例程中使用(過程、函式及方法呼叫)。 當你呼叫例程時,例程引數及返回值是放在棧中的(除非使用delphi預設呼叫方式,對呼叫過程進行優化)。此外,例程中宣告的變數(在begin語句前的 var 塊中)也存放在棧中,所以當例程終止時,這些變數會被自動清除(在返**用點之前以lifo次序釋放)。

棧是應用程式可用的三種記憶體區之一,其它兩種分別是全域性記憶體區和堆。堆的內容請詳見術語表。

delphi 使用棧存放例程引數及其返回值(除非你使用delphi預設的 register 呼叫協定)、區域性例程變數、windows api 函式呼叫等等。

windows 應用程式可以預留大量的棧記憶體,在 delphi 中你可以通過工程選項的 linker 頁設定, 不過一般採用預設設定就可以了。 如果你收到乙個棧溢位錯誤資訊,這可能是因為你的函式進入了死迴圈自呼叫,而不是棧空間太小。

堆記憶體 棧記憶體

從堆和棧的功能和作用來通俗的比較,堆主要用來存放物件的,棧主要是用來執行程式的.而這種不同又主要是由於堆和棧的特點決定的 在程式設計中,例如c c 中,所有的方法呼叫都是通過棧來進行的,所有的區域性變數,形式引數都是從棧中分配記憶體空間的。實際上也不是什麼分配,只是從棧頂向上用就行,就好像工廠中的傳...

堆記憶體和棧記憶體

堆 順序隨意 棧 先進後出 堆和棧的區別 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧 2 堆區 heap 一般由程式設計師分配釋放,若程式設計師不...

堆記憶體棧記憶體詳解

堆 順序隨意 heap 和資料結構中的堆完全兩回事,記憶體分配的操作方式類似於鍊錶 棧 先進後出 stack 和資料結構中的棧也不是一回事,但是記憶體分配的操作方式類似於資料結構中的棧 入口出口為同乙個 此文討論的是 作業系統中的堆和棧,而不是資料結構中的堆和棧 堆和棧的區別 一 預備知識 程式的記...