1、什麼是棧?
棧是一個內存數組,是一個後進先出的數據結構;
幾種數據類型:
1、某些類型變量的值;
2、程序當前的執行環境;
3、傳遞給方法的參數;
幾個普遍特征:
1、數據只能從棧的頂端插入和刪除;
2、把數據放到棧頂成為入棧;
3、從棧頂刪除數據成為出棧;
2、什麼是堆?
堆是一塊內存區域,在堆裡可以分配大塊的內存用於存儲某類型的數據對象;
堆的特征:
1、堆裡面的內存能夠以任意順序存入和移除;
2、不能顯示地刪除程序在堆裡面保存的數據;
3、靠CLR的自動GC(垃圾收集器)判斷並自動清除無主的堆對象,然後釋放它;
4、被釋放對象的內存可以被重用;
3、棧和堆什麼區別?
1、存放的數據類型不同;
2、棧只能從頂端插入和刪除,堆能夠以任意順序存入和移除;
3、棧內存無需管理,也不受GC管理。當棧頂元素使用完畢,立馬釋放。而堆則需要GC(Garbage collection:垃圾收集器)清理;
4、棧由系統自動分配,速度較快。但是無法控制。堆則是那些由new分配的內存塊,他們的釋放編譯器不去管,由我們的應用程序去控制,一般速度比較慢,而且容易產生內存碎片;
4、其實用不著深入追究什麼是“堆”和“棧”,他們都是一塊內存,又都是用來儲存數據的。