c++記憶體管理
operator new 與 operator delete函式
new / delete 原理
棧:非靜態區域性變數,函式引數,返回值等,棧是向下增長的
記憶體對映段:裝載乙個共享的動態記憶體庫
堆:用於程式執行時動態記憶體分配,可以向上增長
資料段:儲存全域性變數和靜態資料
**段:可執行的**、唯讀常量
malloc(申請空間)、calloc(申請空間並進行零初始化)、realloc(調整空間大小,原地調整大小或重開空間,拷貝內容,釋放原空間)
free(釋放空間)
申請空間:
int
* ptr1 =
newint
;//動態申請乙個int型別的空間
int* ptr2 =
newint(10
);//動態申請乙個int型別的空間並初始化為10
int* ptr3 =
new[10]
;//動態申請10個int型別的空間
釋放空間:
delete ptr1;
delete ptr2;
delete
ptr3;
動態建立自定義型別的物件:
class
date
private
:int _year;};
void
test()
釋放自定義型別的空間:
delete pd1;
//呼叫一次析構 + 釋放空間
delete pd2;
//呼叫一次析構 + 釋放空間
delete
pd3;
//呼叫十次析構,因為date[10] + 釋放空間
void
*operator
new(size_t n)
申請失敗會丟擲bad_alloc型別異常執行過程:operator new --> malloc --> 建構函式
void
operator
delete
(void
* ptr)
只有自定義型別才會呼叫建構函式和析構函式
struct node
void
operator
new(
int data)
void
operator
delete
(node* ptr)
private
:int _data;
node* _next;};
void
test()
內建型別:
自定義型別:
:在已經開好的空間上顯示呼叫建構函式
new(pd)date(2030);
date* pd =
(date*
)malloc
(sizeof
(date));
new(pd)
date
(2030);
date* pd2 =
(date*
)malloc
(sizeof
(date));
new(pd2)date;
C 中的記憶體管理
1 new delete c 具備申請 釋放堆記憶體功能的運算子。相當於c語言中的malloc和free new 型別 會自動計算型別所需要的位元組數,然後從堆中分配對應位元組數的記憶體,返回記憶體的首位址 具備型別的指標 delete 指標 會自動釋放記憶體 注意 new delete 與mall...
C 中記憶體管理
1 分配方式簡介 在c 中,記憶體分成5個區,他們分別是堆 棧 自由儲存區 全域性 靜態儲存區和常量儲存區。棧,在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置於處理器的指令集中,效率很高,但是分配的記憶體容量有限。堆,就是那些由n...
C 中vector容器的記憶體管理
vector是類模板,某種程度上可以看做是陣列的公升級版,但建立後仍可以改變大小。甚至 c primer 第4版 中還有這樣子的說法 從技術上說,在原來為空的vector容器上n次呼叫push back函式,從而建立擁有n個元素的vector容器,其執行時間永遠不能超過n的常量倍。大家也可能都知道,...