剛開始學習c++,記錄下點點滴滴,同時也分享下
棧:函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放,棧內分配運算內置於處理器的指令集中,效率高,但是分配的記憶體容量有限。
堆:又稱為動態記憶體分配,程式在執行的時候用new申請任意多少的記憶體,由程式設計師自己負責在何時用delete釋放記憶體。動態記憶體的生存週期由我們決定,使用靈活,但是問題也比較多。
剛開始學習c++,感覺會有很多人和我一樣,可能明白堆和棧的區別,也能明白簡單情況下物件是儲存在堆中還是棧中,複雜的就有可能分不清了。
int main()
輸出結果是
指標i指向的物件位址要低於j指向的位址,是向高位址位擴充套件,所以指標i,j指向的物件儲存在堆中。而a,b的位址可以看出,是向低位址位擴充套件,所以a,b是儲存在棧中。
細心的朋友可以發現,我**中有用到了delete i,這裡也是有用的,因為這是第2種判斷物件儲存位置的方法。指標只能指向堆中物件,不能指向棧中物件,可以用指標指向要判斷的物件,然後用delete關鍵字刪除指標指向的物件,如果程式崩潰,說明不能刪除,物件是儲存在棧中的。反之物件是儲存在堆中。為什麼會這樣,因為棧的釋放是不能由我們控制的,是自動釋放,人為干涉就會使程式崩潰。
剛剛開始學習,不知道理解的對不對,希望大家指正
c 中堆和棧的區別
詳細的可以看下這篇部落格 乙個由c c 編譯的程式占用的記憶體分為以下幾個部分 1 棧區 stack 由編譯器自動分配釋放 存放函式的引數值,區域性變數的值等。2 堆區 heap 一般由程式設計師分配釋放,需要程式設計師手動釋放。3 全域性區 靜態區 static 全域性變數和靜態變數的儲存是放在一...
c 中記憶體的分類及堆和棧的區別
c 中經常操作的記憶體分為以下幾個類別 1 棧區 stack 由編譯器自動分配和釋放,存放函式的引數值 區域性變數的值等等。其操作方式類似於資料結構中的棧 只要棧的剩餘空間大於申請空間,系統就為其提供記憶體,否則包異常提示棧溢位。在windows下棧是向低位址拓展的資料結構,是一塊連續的記憶體空間,...
c 棧和堆的區別
在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,就是那些由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。堆,就是那些由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個n...