C 中基本的記憶體管理

2021-10-06 16:03:07 字數 1787 閱讀 8059

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的常量倍。大家也可能都知道,...