簡介
棧(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 執行解構函式
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的協助,如果有疑問大家可以留言交流。