簡介
棧(stack),先進后出,位于一級緩存中,操作系統自動分配釋放 ,存放函數的參數值,局部變量的值等,被調用時處于存儲空間中,調用完畢立即釋放。
堆(heap),堆包含一個鏈表來維護已用和空閑的不連續的內存塊,存放在二級緩存中,一般由程序員分配釋放。
快速記憶方式:
一級緩存比二級緩存快,棧是一個先進后出列表,存取非???,所以棧是在一級緩存中。
棧中不能隨機取數據,只能取最上面的一個,存放的內容必然要有嚴格的存取順序,所以適合函數調用時的形參、局部變量。
棧空間有限,一般PC一級緩存就幾M,所以其中的數據也是快速使用,快速刪除。像形參、局部變量,在函數調用結束系統就會把數據主動銷毀了。
堆空間大,由程序員維護,系統不會主動銷毀。
示例代碼如下:
#include <iostream>using namespace std;class TestNew{private: int ID;public: TestNew(int ID); ~TestNew();};TestNew::TestNew(int ID){ this->ID = ID;}TestNew::~TestNew(){ std::cout<<"對象 "<<this->ID<<" 執行析構函數"<<std::endl;}void Test(){ TestNew test(1);//創建對象1,不使用new,存儲在棧中 TestNew *pTest = new TestNew(2);//創建對象2,使用new,存儲在堆中 //delete pTest;}int main(){ Test();//這個地方有點問題,pTest沒有進行處理,會導致內存泄露,實際應用中要注意呀}
輸出結果:
對象 1 執行析構函數
說明函數調用結束,對象1被系統主動銷毀了。
如果把Test()方法中,delete前的注釋去掉。
輸出:
對象 2 執行析構函數
對象 1 執行析構函數
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。
新聞熱點
疑難解答