C 記憶體管理總結

2021-08-16 21:57:02 字數 973 閱讀 3080

記憶體分配方式:堆,棧,自由儲存區,全域性區,常量儲存區

棧:函式內部的區域性變數,函式形參等,自動建立自動釋放

堆:由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...