棧和堆的區別是
棧是系統根據變數大小自動分配空間的
堆是你用new,malloc等手動分配空間的
區域性變數儲存在棧記憶體區;
棧記憶體區的位址是連續的,由系統控制速度較快而
堆記憶體區的位址是不連續的,它是系統將空閒記憶體塊鏈結起來的鍊錶,
使用者用new/malloc請求分配時,找到第乙個滿足大小要求的塊從鍊錶中刪除此節點,
然後分給使用者,沒有棧記憶體速度快,但是很靈活。
作業系統給程式執行的記憶體非了4個區域:
1 **區:顧名思義就是存放執行的**的
2 全域性資料區: 存放全域性資料和靜態資料以及常量.
3 棧區 函式呼叫時的返回位址,引數壓棧,區域性變數,返回資料等都存放在棧區.
4 堆區,存放程式動態分配的記憶體(new,malloc等函式分配的)
棧記憶體是由系統自己分配和釋放的,而堆記憶體要由程式設計師自己全全控制的,否則會出現記憶體洩露
C 儲存空間
自動儲存 在函式內部定義的常規變數使用自動儲存空間,被稱為自動變數,這意味著它們在所屬的函式被呼叫時自動產生,在該函式結束時消亡。自動變數通常儲存在棧中。靜態儲存 靜態儲存是整個程式執行期間都存在的儲存方式。一種是在函式外面定義它,一種是在宣告變數時使用關鍵字static。注意區分其作用域和生命週期...
C 類的儲存空間
1 空類的記憶體佔用量為1,這是因為c 要保證被乙個類的物件都有乙個特定的位址 因而賦予給他乙個位址作為標識 當有了成員變數了就不需要了。2 非虛函式不佔類空間.在編譯時是靜態繫結,類呼叫時就象呼叫庫函式一樣,所以類空 間中沒有為普通成員函式分配空間。3 虛函式佔4位元組空間,函式和純虛函式是動態繫...
c程式儲存空間布局
摘自 c程式一直由下面幾部分組成 1 棧 由編譯器自動分配釋放管理。區域性變數及每次函式呼叫時返回位址 以及呼叫者的環境資訊 例如某些機器暫存器 都存放在棧中。新被呼叫的函式在棧上為其自動和臨時變數分配儲存空間。通過以這種方式使用棧,c函式可以遞迴 呼叫。遞迴函式每次呼叫自身時,就使用乙個新的棧幀,...