C 記憶體相關學習

2021-10-24 02:22:32 字數 3141 閱讀 4848

int globalvar =1;

static

int staticglobalvar =1;

void

test()

;char char2=

"abcd"

;char

* pchar3 =

"abcd"

;int

* ptr1 =

(int*)

malloc

(sizeof

(int)*

4);int

* ptr2 =

(int*)

calloc(4

,sizeof

(int))

;int

* ptr3 =

(int*)

realloc

(ptr2,

sizeof

(int)*

4);free

(ptr1)

;free

(ptr3)

;}

1. 棧又叫堆疊,非靜態區域性變數/函式引數/返回值等等,棧是向下增長的。

2. 記憶體對映段是高效的i/o對映方式,用於裝載乙個共享的動態記憶體庫。使用者可使用系統介面建立共享共享記憶體,做程序間通訊。

3. 堆用於程式執行時動態記憶體分配,堆是可以上增長的。

4. 資料段–儲存全域性資料和靜態資料。

5. **段–可執行的**/唯讀常量。

c語言中動態記憶體管理方式

malloc/calloc/realloc和free

void

test()

c++記憶體管理方式

new/delete操作內建型別

void

test()

申請和釋放單個元素的空間,使用new和delete操作符,申請和釋放連續的空間,使用new和delete

new和delete操作自定義型別

class

test

~test()

private

:int _data;};

void

test2()

void

test2()

在申請自定義型別的空間時,new會呼叫建構函式,delete會呼叫析構函式,而malloc與free不會

operator new與operator delete函式

operator new與operator delete函式

new和delete是使用者進行動態記憶體申請和釋放的操作符,operator new 和operator delete是系統提供的全域性函式,new在底層呼叫operator new全域性函式來申請空間,delete在底層通過operator delete全域性函式來釋放空間

/*

operator new:該函式實際通過malloc來申請空間,當malloc申請空間成功時直接返回;申請空間失敗,嘗試

執行空 間不足應對措施,如果改應對措施使用者設定了,則繼續申請,否則拋異常。

*/void

*__crtdecl operator

new(size_t size)

_throw1

(_std bad_alloc)

return

(p);}/*

operator delete: 該函式最終是通過free來釋放空間的

*/void

operator

delete

(void

*puserdata)

/*free的實現

*/#define free(p) _free_dbg(p,_normal_block)

通過上述兩個全域性函式的實現知道,operator new 實際也是通過malloc來申請空間,如果malloc申請空間成功就直接返回,否則執行使用者提供的空間不足應對措施,如果使用者提供該措施就繼續申請,否則就拋異常。operator delete 最終是通過free來釋放空間的

operator new與operator delete的類專屬過載

針對鍊錶的節點listnode通過過載類專屬 operator new/ operator delete,實現鍊錶節點使用記憶體池申請和釋放記憶體,提高效率

struct listnode

void

operator

delete

(void

* p)};

class

list

~list()

delete _head;

_head =

nullptr;}

private

: listnode* _head;};

intmain()

new和delete的實現原理

內建型別

如果申請的是內建型別的空間,new和malloc,delete和free基本類似,不同的地方是:new/delete申請和釋放的是單個元素的空間,new和delete申請的是連續空間,而且new在申請空間失敗時會拋異常,malloc會返回null。

自定義型別

new的原理

呼叫operator new函式申請空間

在申請的空間上執行建構函式,完成物件的構造

delete的原理

1.在空間上執行析構函式,完成物件中資源的清理工作

3. 呼叫operator delete函式釋放物件的空間

new t[n]的原理

4. 呼叫operator new函式,在operator new中實際呼叫operator new函式完成n個物件空間的申請

5. 在申請的空間上執行n次建構函式

delete的原理

1.在釋放的物件空間上執行n次析構函式,完成n個物件中資源的清理

2. 呼叫operator delete釋放空間,實際在operator delete中呼叫operator delete來釋放空間

C 記憶體相關

1 c 的記憶體管理可分為以下幾個部分 棧 記錄程式的執行過程。堆 採用new,delete申請釋放記憶體。自由儲存區 對應於c中使用malloc,free申請釋放記憶體。全域性儲存區 也叫靜態儲存區,儲存static物件,包括全域性物件,命名空間內物件,檔案作用域內的static物件,類中的sta...

C 學習 時間相關

c 常用的函式在中 或time.h 1,資料結構 表示時間的資料結構有三個 time t tm和timeval time t long int,用來表示絕對時間 tm是乙個struct,裡邊有如下成員 tm sec 秒 tm min 分 tm hour 小時 tm mday 天 月 tm mon 月...

c 相關基礎學習

1.剖析c 是如何實現過載的?在c 中,同名的函式可以完成不同引數列表,可同可不同的返回值的函式。例如 int add int a,int b double add double a,double b int main 同名函式可有三種情況進行過載 1.引數型別不同 2.引數的個數不同 3.以上兩點...