◎歡迎參與討論,請在這里發(fā)表您的看法、交流您的觀點。
堆??臻g分配區(qū)別 棧(操作系統(tǒng)):由操作系統(tǒng)(編譯器)自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。堆(操作系統(tǒng)): 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收,分配方式倒是類似于鏈表。
申請方式的不同。棧由系統(tǒng)自動分配,而堆是人為申請開辟;申請大小的不同。棧獲得的空間較小,而堆獲得的空間較大;申請效率的不同。棧由系統(tǒng)自動分配,速度較快,而堆一般速度比較慢;存儲內(nèi)容的不同。
內(nèi)存區(qū)域不同 堆內(nèi)存是區(qū)別于棧區(qū)、全局?jǐn)?shù)據(jù)區(qū)和代碼區(qū)的另一個內(nèi)存區(qū)域。堆允許程序在運行時動態(tài)地申請某個大小的內(nèi)存空間。棧內(nèi)存在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。
管理方式不同 堆是由程序員通過調(diào)用系統(tǒng)庫函數(shù)來管理內(nèi)存,所以管理不力就會出現(xiàn)常說的內(nèi)存泄漏。棧是由計算機(jī)系統(tǒng)分配內(nèi)存而且系統(tǒng)有專門的寄存器存儲棧指針。生長方式不同 堆是向高地址擴(kuò)展也就是常說的向上生長。是不連續(xù)的內(nèi)存區(qū)域。棧是向低地址擴(kuò)展也就是常說的向下生長。是連續(xù)的內(nèi)存區(qū)域。
1、內(nèi)存區(qū)域不同 堆內(nèi)存是區(qū)別于棧區(qū)、全局?jǐn)?shù)據(jù)區(qū)和代碼區(qū)的另一個內(nèi)存區(qū)域。堆允許程序在運行時動態(tài)地申請某個大小的內(nèi)存空間。棧內(nèi)存在函數(shù)中定義的一些基本類型的變量和對象的引用變量都在函數(shù)的棧內(nèi)存中分配。
2、主體不同 內(nèi)存堆:是一個特定的存儲區(qū)或寄存器,它的一端是固定的,另一端是浮動的。棧:是一種運算受限的線性表。特點不同 內(nèi)存堆:允許程序在運行時動態(tài)地申請某個大小的內(nèi)存空間。棧:定僅在表尾進(jìn)行插入和刪除操作的線性表。
3、管理方式不同 堆是由程序員通過調(diào)用系統(tǒng)庫函數(shù)來管理內(nèi)存,所以管理不力就會出現(xiàn)常說的內(nèi)存泄漏。棧是由計算機(jī)系統(tǒng)分配內(nèi)存而且系統(tǒng)有專門的寄存器存儲棧指針。生長方式不同 堆是向高地址擴(kuò)展也就是常說的向上生長。是不連續(xù)的內(nèi)存區(qū)域。棧是向低地址擴(kuò)展也就是常說的向下生長。是連續(xù)的內(nèi)存區(qū)域。
主體不同 堆:是計算機(jī)科學(xué)中一類特殊的數(shù)據(jù)結(jié)構(gòu)的統(tǒng)稱。堆通常是一個可以被看做一棵完全二叉樹的數(shù)組對象。棧:又名堆棧,它是一種運算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。
棧使用的是一級緩存,通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放;堆是存放在二級緩存中,生命周期由虛擬機(jī)的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。所以調(diào)用這些對象的速度要相對來得低一些。
主體不同 內(nèi)存堆:是一個特定的存儲區(qū)或寄存器,它的一端是固定的,另一端是浮動的。棧:是一種運算受限的線性表。特點不同 內(nèi)存堆:允許程序在運行時動態(tài)地申請某個大小的內(nèi)存空間。棧:定僅在表尾進(jìn)行插入和刪除操作的線性表。
棧區(qū)(stack)— 由編譯器自動分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類似于數(shù)據(jù)結(jié)構(gòu)中的棧。堆區(qū)(heap) — 一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類似于鏈表,呵呵。
堆棧緩存方式區(qū)別 棧使用的是一級緩存, 它們通常都是被調(diào)用時處于存儲空間中,調(diào)用完畢立即釋放。堆則是存放在二級緩存中,生命周期由虛擬機(jī)的垃圾回收算法來決定(并不是一旦成為孤兒對象就能被回收)。所以調(diào)用這些對象的速度要相對來得低一些。
申請方式的不同。棧由系統(tǒng)自動分配,而堆是人為申請開辟;申請大小的不同。棧獲得的空間較小,而堆獲得的空間較大;申請效率的不同。棧由系統(tǒng)自動分配,速度較快,而堆一般速度比較慢;存儲內(nèi)容的不同。
管理方式不同 堆是由程序員通過調(diào)用系統(tǒng)庫函數(shù)來管理內(nèi)存,所以管理不力就會出現(xiàn)常說的內(nèi)存泄漏。棧是由計算機(jī)系統(tǒng)分配內(nèi)存而且系統(tǒng)有專門的寄存器存儲棧指針。生長方式不同 堆是向高地址擴(kuò)展也就是常說的向上生長。是不連續(xù)的內(nèi)存區(qū)域。棧是向低地址擴(kuò)展也就是常說的向下生長。是連續(xù)的內(nèi)存區(qū)域。