併發程式設計之什麼是堆疊 它們有什麼區別

2021-09-30 20:14:25 字數 855 閱讀 6205

什麼是堆疊?有什麼區別?

堆疊都是一種資料項按序排列的資料結構,只能在一端對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和位址,通常用來保護斷點和現場。要點:堆,佇列優先,先進先出(fifo—first in first out)[1]  。棧,先進後出(filo—first-in/last-out)。

記憶體的分割槽:常量區,靜態區(全域性區),堆,棧,**區

1.管理方式:對於棧來講,是由編譯器自動管理,無需我們手工控制;對於堆來說,釋放工作由程式設計師控制,容易產生記憶體洩露。

2.申請大小:如果棧申請的空間超過棧的剩餘空間時,將提示記憶體溢位(8m)。因 此,能從棧獲得的空間較小。堆是由於系統是用鍊錶來儲存的空閒記憶體位址的,不是連續的堆獲的空間比較靈活,也比較大。

3.碎片問題:對於堆來講,頻繁的new/delete勢必會造成記憶體空間的不連續,從而造成大量的碎 片,使程式效率降低對於棧來講,則不會存在這個問題,因為棧是先進後出的佇列,他們是如此的一一對應,以至於永遠都不可能有乙個記憶體塊從棧中間彈出

4.分配方式:堆都是動態分配的,沒有靜態分配的堆。棧有2種分配方式:靜態分配和動態分配。靜態分配是編譯器完成的,比如區域性變數的分配。動態分配由alloca函式進行分配,但是棧的動態分配和堆是不同的,他的動態分配是由編譯器進行釋放,無需我們手工實現。

5.分配效率:棧是機器系統提供的資料結構,計算機會在底層對棧提供支援:分配專門的暫存器存放棧的位址,壓棧出棧都有專門的指令執行,這就決定了棧的效率比較高。堆則是c/c++函式庫提供的,它的機制是很複雜的

多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差寫,對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

什麼是堆疊,有什麼區別

堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。要點 堆 順序隨意 棧 後進先出 last in first out 一 預備知識 程式的記憶體分配 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器 自動分配釋放 存放函...

什麼是堆 棧

delphi 的屬性太複雜了,先換換思路,再繼續學習.程式需要的記憶體空間分為 heap 堆 和 stack 棧 heap 是自由儲存區,stack 是自動儲存區 使用 heap 需要手動申請 手動釋放,stack 是自動申請 自動釋放 使用 heap 時,如果只申請不釋放,就會發生 記憶體洩露 不...

什麼是併發

定義 在作業系統中,是指乙個時間段中有幾個程式都處於已啟動執行到執行完畢之間,且這幾個程式都是在同乙個處理機上執行,但任乙個時刻點上只有乙個程式在處理機上執行。在關聯式資料庫中,允許多個使用者同時訪問和更改共享資料的程序。sql server 使用鎖定以允許多個使用者同時訪問和更改共享資料而彼此之間...