佇列 堆 棧 堆疊的區別

2022-07-29 15:06:18 字數 759 閱讀 8759

堆疊:先進後出(就像放在箱子的衣服,先放進去的後拿出來)

佇列:先進先出(就像一條路,有乙個入口和乙個出口,先進去的就可以先出去)

程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的「棧記憶體」即在此。

至於「堆」記憶體,我個人認為在未用new定義時,堆應該就是未「保留」未「提交」的自由空間,new的功能是在這些自由空間中保留(並提交)出乙個位址範圍。

棧(stack)是作業系統在建立某個程序時或者執行緒(在支援多執行緒的作業系統中是執行緒)為這個執行緒建立的儲存區域,該區域具有fifo的特性,在編譯的時候可以指定需要的stack的大小。在程式設計中,例如c/c++中,所有的區域性變數都是從棧中分配記憶體空間,實際上也不是什麼分配,只是從棧頂向上用就行,在退出函式的時候,只是修改棧指標就可以把棧中的內容銷毀,所以速度最快。 

堆(heap)是應用程式在執行的時候請求作業系統分配給自己記憶體,一般是申請/給予的過程,c/c++分別用malloc/new請求分配heap,用free/delete銷毀記憶體。由於從作業系統管理的記憶體分配所以在分配和銷毀時都要占用時間,所以用堆的效率低的多!但是堆的好處是可以做的很大,c/c++對分配的heap是不初始化的。 

堆是在程式執行時,而不是在程式編譯時,申請某個大小的記憶體空間。即動態分配記憶體,對其訪問和對一般記憶體的訪問沒有區別。

棧是先進後出的,但是於堆而言卻沒有這個特性,兩者都是存放臨時資料的地方。 對於堆,我們可以隨心所欲的進行增加變數和刪除變數,不要遵循什麼次序,只要你喜歡。

佇列 堆 棧 堆疊的區別?

佇列是先進先出 就像一條路,有乙個入口和乙個出口,先進去的就可以先出去。而棧就像乙個箱子,後放的在上邊,所以後進先出。程序中每個執行緒都有自己的堆疊,這是一段執行緒建立時保留下的位址區域。我們的 棧記憶體 即在此。至於 堆 記憶體,我個人認為在未用new定義時,堆應該就是未 保留 未 提交 的自由空...

堆,棧,堆疊的區別

乙個程式一般分為3段 text段,data段,bss段 text段 就是放程式 的,編譯時確定,唯讀,data段 存放在編譯階段 而非執行時 就能確定的資料,可讀可寫 就是通常所說的靜態儲存區,賦了初值的全域性變數和靜態變數存放在這個區域,常量也存放在這個區域 bss段 定義而沒有賦初值的全域性變數...

堆 棧和佇列的區別

目錄 資料結構中的堆 棧和佇列 記憶體申請中的堆和棧 乙個c c 程式占用的記憶體如下 申請記憶體後的響應 申請大小的限制 申請效率的比較 堆和棧中的儲存內容 堆 堆是一種經過排序的樹形資料結構,每個結點都有乙個值。通常我們所說的堆的資料結構,是指二叉堆。堆的特點是根結點的值最小 或最大 且根結點的...