国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
隊列、堆、棧、堆棧的區(qū)別?
隊列、堆、棧、堆棧的區(qū)別?
2010-11-02 13:24

隊列是先進先出:就像一條路,有一個入口和一個出口,先進去的就可以先出去。

而棧就像一個箱子,后放的在上邊,所以后進先出。

*************************************************************************************************************************************
進程中每個線程都有自己的堆棧,這是一段線程創(chuàng)建時保留下的地址區(qū)域。我們的“棧內(nèi)存”即在此。至于“堆”內(nèi)存,我個人認為在未用new定義時,堆應(yīng)該就是未“保留”未“提交”的自由空間,new的功能是在這些自由空間中保留(并提交)出一個地址范圍。
棧(Stack)是操作系統(tǒng)在建立某個進程時或者線程(在支持多線程的操作系統(tǒng)中是線程)為這個線程建立的存儲區(qū)域,該區(qū)域具有FIFO的特性,在編譯的時候可以指定需要的Stack的大小。在編程中,例如C/C++中,所有的局部變量都是從棧中分配內(nèi)存空間,實際上也不是什么分配,只是從棧頂向上用就行,在退出函數(shù)的時候,只是修改棧指針就可以把棧中的內(nèi)容銷毀,所以速度最快。
堆(Heap)是應(yīng)用程序在運行的時候請求操作系統(tǒng)分配給自己內(nèi)存,一般是申請/給予的過程,C/C++分別用malloc/New請求分配Heap,用free/delete銷毀內(nèi)存。由于從操作系統(tǒng)管理的內(nèi)存分配所以在分配和銷毀時都要占用時間,所以用堆的效率低的多!但是堆的好處是可以做的很大,C/C++對分配的Heap是不初始化的。
在Java中除了簡單類型(int,char等)都是在堆中分配內(nèi)存,這也是程序慢的一個主要原因。但是跟C/C++不同,Java中分配Heap內(nèi)存是自動初始化的。在Java中所有的對象(包括int的wrapper Integer)都是在堆中分配的,但是這個對象的引用卻是在Stack中分配。也就是說在建立一個對象時從兩個地方都分配內(nèi)存,在Heap中分配的內(nèi)存實際建立這個對象,而在Stack中分配的內(nèi)存只是一個指向這個堆對象的指針(引用)而已。
**********************************************************************************************************************************
堆是在程序運行時,而不是在程序編譯時,申請某個大小的內(nèi)存空間。即動態(tài)分配內(nèi)存,對其訪問和對一般內(nèi)存的訪問沒有區(qū)別。{堆是指程序運行是申請的動態(tài)內(nèi)存,而棧只是指一種使用堆的方法(即先進后出)。}
********************************************************************************************************************************
棧是先進后出的,但是于堆而言卻沒有這個特性,兩者都是存放臨時數(shù)據(jù)的地方。 對于堆,我們可以隨心所欲的進行增加變量和刪除變量,不要遵循什么次序,只要你喜歡。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
深入理解 STM32 雙堆棧機制
堆棧和委托堆的區(qū)別(c#)一
iOS中堆和棧的使用
堆棧(stack)與堆(heap)的區(qū)別
什么是堆和棧,它們在哪兒?
堆內(nèi)存和棧內(nèi)存的區(qū)別
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服