c語言中使用malloc(進行動態開闢空間)、calloc(動態開闢空間,函式在返回前把記憶體初始化為0)、realloc(用於增容,用於修改乙個原先已經分配的記憶體塊大小)、free進行動態記憶體管理
c++通過new 和 delete動態管理記憶體
new/delete動態管理物件
new/delete動態管理物件組
void test()
new和delete:操作符 int:型別 (3):初始化為3 [3]:物件個數為3
1. 對於內建型別:new和malloc本還沒有區別
2. 對於自定義型別:malloc動態開闢空間;new 動態開闢空間、呼叫建構函式(初始化)、呼叫析構函式(清理)
注意!malloc/free、new/delete、new/delete,一定要匹配使用,否則可能出現記憶體洩漏的問題
棧又叫堆疊:非靜態區域性變數、函式引數、返回值等等,棧是向下增長的
記憶體對映區:高效的i/o對映方式,用來裝在乙個共享的動態記憶體庫
堆:用於程式執行時動態記憶體分配,堆是可以向上生長的
資料段:儲存全域性資料和靜態資料
**段:可執行的**/唯讀常量
保護實體地址
擴大空間,實體地址不夠用
方便實現了父子程序的通訊
static
int a=10;
int b=10;
void func()
nul位元組是字串的終止符,但本身並不是字串的一部分,字串的長度不包括nul
1.strlen(p1)=5
2. strlrn(p2)=5
3.sizeof(p1)=4或8 p1為指標,在32平台為4,64為平台為8
4.sizeof(p2)=6 陣列的大小,包括/0
a:棧(非靜態區域性變數,函式引數,返回值) b:堆(動態記憶體分配) c:資料段(全域性資料和靜態資料) d:**段(常量區)
a c 靜態資料
b c 全域性資料
c c 靜態資料
d a 非靜態區域性變數
p1 a 區域性指標變數
p2 a 區域性陣列
p3 a 區域性指標變數
*p1 d
*p2 a
*p3 b 動態記憶體分配
malloc/free和new/delete的區別和聯絡?
都是動態管理記憶體的入口
malloc/free是c/c++的標準庫函式,new/delete是c++操作符
malloc/free只是動態分配記憶體空間、釋放空間(malloc只是開闢了與物件具有相同大小的記憶體塊空間)。而new/delete除了分配空間還會呼叫建構函式和析構函式進行初始化與清理(new呼叫建構函式來建立物件)
malloc/free需要手動計算型別大小且返回值為void*,new/delete可以自己計算型別的大小,返回對應型別性的指標
malloc失敗,返回0;new失敗,丟擲異常
new做了兩件事:
呼叫operator new 分配空間
呼叫建構函式初始化物件
delete也做了兩件事:
呼叫析構函式清理物件
呼叫operator delete釋放空間
new[n]
呼叫operator new 分配空間
呼叫n次建構函式分別初始化每個物件
delete[n]
1. 呼叫n次析構函式清理物件
2. 呼叫operator delete釋放空間
什麼是記憶體洩漏:在堆上申請的空間沒有釋放
如何避免:良好的程式設計習慣,使用系統自帶的工具(vs下crtdbg),自己實現檢測工具,第三方檢測工具
C 動態記憶體管理
我們都知道在c 中可以用new malloc動態分配記憶體空間,delete free釋放動態開闢的記憶體空間。1.那麼既然c 中有了可以動態開闢記憶體的函式為什麼又要有new delete呢?c 中的malloc free是繼承c語言中的malloc free,它的用法和在c語言中的用法一模一樣。...
C 動態記憶體管理
1 總結並剖析malloc free和new delete之間關係和差異。1 他們都是動態記憶體管理的入口 2 malloc要計算空間大小,返回值要強轉 new自動計算位元組大小,返回值是相應型別的指標 3 malloc只開闢空間 new開闢空間 呼叫建構函式初始化 delete呼叫析構函式清理 釋...
c 動態記憶體管理
c語言動態記憶體管理 c中關於動態記憶體的標準庫函式 malloc calloc realloc free 以下是關於這幾個函式的介紹 1 malloc 用於動態開闢記憶體 堆空間 返回型別為void 引數 size t size 是無符號整型表示要開闢的空間大小,單位是位元組,2 calloc 用...