記憶體分配方式:堆,棧,自由儲存區,全域性區,常量儲存區
棧:函式內部的區域性變數,函式形參等,自動建立自動釋放
堆:由new delete運算子建立和釋放,或者程式結束後os自動**
自由儲存區:標準庫函式malloc分配的空間
全域性區:全域性變數和靜態變數儲存的區域
常量儲存區:存常量,此區域資料不允許被修改,一些字串常量等放在這裡
堆和棧的區別:
(1)管理方式
堆:使用者動態建立,使用者釋放,忘記釋放會產生記憶體洩漏
棧:自動釋放
(2)空間大小
堆:空間大:4g(32位系統)
棧:空間小(vc下約為1mb)
(3)碎片問題
堆:頻繁的new/delete會造成記憶體空間的不連續,從而產生大量碎片,使得程式效率低
棧:無記憶體碎片問題
(4)生長方向
堆:向上,記憶體增加的方向
棧:向下,記憶體減少的方向
(5)分配方式
堆:動態分配
棧:動態和靜態分配(靜態為編譯器完成)
(6)分配效率
棧的分配效率要高,因為計算機底層提供對棧的支援,分配專門的暫存器存放棧的位址,專門的指令對棧進行操作
堆的使用規則要注意:
(1)用new或者malloc動態分配記憶體後要檢查是否為空,檢查記憶體是否分配成功,防止使用記憶體位址為空的位址指標
(2)不要忘記為陣列和動態記憶體賦初值,避免未被初始化的記憶體做右值
(3)避免陣列,指標的下標越界
(4)new/delete,malloc/free要成對使用,防止記憶體洩漏,且使用delete和free之後要把指標設為空(null)防止野指標的存在
野指標產生的原因:
1、指標變數沒有被初始化;2
、指標被
free/delete
後被沒有設定為
null;
3、指標操作超越了變數的作用域範圍
.
C語言記憶體管理總結(2)
堆是乙個大容器,它的容量要遠遠大於棧,這可以解決由於棧造成的記憶體溢位的困難 由於棧一般都是以k為單位,如果程式中直接將較大的陣列儲存在函式內的棧變數中,很可能會記憶體溢位 一般比較複雜的資料型別都是放在堆中。但是在c語言中,堆記憶體空間的申請和釋放需要手動通過 來完成.在這個檔案中 include...
總結 記憶體管理
上下限暫存器 在cpu中設定上下限暫存器,用於分別存放作業在主存中的上限和下限位址 界位址暫存器 界位址暫存器存有程序的最大邏輯位址,若不越界,加上重定位暫存器 存有程序的起始實體地址 的值即為實體地址 編譯鏈結 裝入固定式分割槽 程式適應分割槽 可變式分割槽 分割槽適應程式 單一佇列分配方式 多佇...
記憶體管理總結
一 計數器的基本操作 1 retain 1 2 release 1 3 retaincount 獲得計數器 二 set方法的記憶體管理 1 set方法的實現 2 dealloc方法的實現 不要直接呼叫dealloc 三 property引數 1 oc物件型別 property nonatomic,r...