C++學習體會:記憶體管理
1.記憶體分配的三種方式
(1)從靜態儲存區域分配。記憶體在程式編譯的時候就已經分配好,這塊記憶體在程式的整個執行期間都存在。例如全域性變數,static變數。
(2)在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內建於處理器的指令集中,效率很高,但是分配的記憶體容量有限。
(3) 從堆上分配,亦稱動態記憶體分配。程式在執行的時候用malloc或new申請任意多少的記憶體,程式設計師自己負責在何時用free或delete釋放記憶體。動態記憶體的生存期由我們決定,使用非常靈活,但問題也最多。
2.使用原則
(1)用malloc或new來申請記憶體,應該用if(p==NULL) 或if(p!=NULL)進行防錯處理。
(2)無論用何種方式建立陣列,都要賦初值
(3)動態記憶體的申請與釋放必須配對,程式中malloc與free的使用次數一定要相同(new/delete同理)。
(4)free或delete釋放了記憶體後,將指標設定為NULL。避免產生“野指標”
(5)自己使用的記憶體最好還是自己申請和釋放。
相關文章
- Spark學習——記憶體管理Spark記憶體
- C++記憶體管理C++記憶體
- C++記憶體管理剖析C++記憶體
- JVM學習-自動記憶體管理JVM記憶體
- linux記憶體管理學習總結Linux記憶體
- C++記憶體管理:簡易記憶體池的實現C++記憶體
- 記憶體管理 記憶體管理概述記憶體
- JVM學習筆記——自動記憶體管理JVM筆記記憶體
- 記憶體管理篇——實體記憶體的管理記憶體
- 作業系統——記憶體管理學習筆記作業系統記憶體筆記
- XV6學習筆記(2) :記憶體管理筆記記憶體
- 深度學習 Caffe 記憶體管理機制理解深度學習記憶體
- 【記憶體管理】記憶體佈局記憶體
- C++動態記憶體管理——new/deleteC++記憶體delete
- C++記憶體管理:new / delete 和 cookieC++記憶體deleteCookie
- 記憶體管理兩部曲之實體記憶體管理記憶體
- Java的記憶體 -JVM 記憶體管理Java記憶體JVM
- Go:記憶體管理與記憶體清理Go記憶體
- 記憶體分配策略學習記憶體
- 【C/C++】4.C++的記憶體管理C++記憶體
- linux記憶體管理(一)實體記憶體的組織和記憶體分配Linux記憶體
- 【記憶體管理】Oracle AMM自動記憶體管理詳解記憶體Oracle
- 記憶體管理兩部曲之虛擬記憶體管理記憶體
- Linux實體記憶體管理Linux記憶體
- iOS底層學習 - 記憶體管理之weak原理探究iOS記憶體
- Java記憶體區域學習Java記憶體
- c++動態記憶體管理與智慧指標C++記憶體指標
- C++動態記憶體管理與原始碼剖析C++記憶體原始碼
- JavaScript 記憶體管理JavaScript記憶體
- iOS 記憶體管理iOS記憶體
- Android記憶體管理Android記憶體
- OC記憶體管理記憶體
- 記憶體管理-swMemoryGlobal記憶體
- Flink記憶體管理記憶體
- MySQL記憶體管理MySql記憶體
- 侯捷C++手把手教學:堆、棧與記憶體管理C++記憶體
- C++記憶體掃描C++記憶體
- 【記憶體管理】Oracle如何使用ASMM自動共享記憶體管理記憶體OracleASM
- JVM學習(一)——記憶體結構JVM記憶體