C 和C語言的記憶體管理

2021-07-28 08:48:12 字數 1350 閱讀 9259

在c語言中學到了四個動態記憶體管理和函式,分別為malloc、calloc、realloc和free

函式原型為void* malloc(size_t  _size);

void free( void *memblock );

void *calloc( size_t num, size_t size );

void *realloc( void *memblock, size_t size );

1)malloc分配一塊連續的記憶體空間,malloc返回的指標要進行檢查,malloc需要手動計算型別的大小,malloc實際分配的記憶體可能比申請的空間要大一些

2)calloc也是分配一塊連續的記憶體空間,但是calloc申請的空間全部被初始化為0

3)realloc用於調整乙個原先已分配的記憶體空間的大小,返回的可能是新的位址,也可能是原先的記憶體空間的位址

4)free用來釋放已申請的記憶體空間

在c++中動態開闢和釋放空間採用的是new和delete操作符

new/delete 用於動態管理單個物件

new/delete用於動態管理物件陣列

都是在堆上開闢空間

c++中還有幾個標準庫函式

如:void* operator new(size_t size)     這個函式不是new操作符的過載

在使用new操作符時,會先呼叫operator new()函式,而在此函式內部實質也是使用malloc來開闢空間

malloc/free和new/delete的區別和聯絡

1)

它們都是動態管理記憶體的入口

2)malloc和free時c/c++標準庫的函式,而new/delete是c++的操作符

3)malloc/free只是動態分配記憶體/釋放空間,而new/delete除分配記憶體空間外還呼叫建構函式和析構函式進行初始化和清理工作

4)malloc/free需要手動計算型別的大小且返回值型別為void*,new/delete可自己計算型別的大小,返回值為對應型別的指標

c語言記憶體管理

在c語言中,根據資料在記憶體中存在的時間 生存期 不同,將記憶體空間分為三個區 1.程式區 用於儲存程式的 即程式的二進位制 存放函式體的二進位制 2.靜態儲存區 用於儲存全域性變數和靜態變數,這些變數的空間在程式編譯時就已經分配好了.全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態...

C語言 記憶體管理

對於任何的作業系統來說,記憶體都是很寶貴的乙個地方。所以,對於程式語言來說,記憶體管理就顯得尤為重要。c語言 在記憶體中執行的時候,我們大致將占用的記憶體分為4塊區域 區 靜態區 棧區 堆區。這4各區域,有著各自的特點,他們也儲存著我們的程式在執行中的不同型別的資料。弄明白了這4個區域的資料儲存特點...

C語言 記憶體管理

記憶體管理一號傳送門 記憶體管理二號傳送門 對於乙個c語言程式而言,記憶體空間主要由五個部分組成 段 text 資料段 data bss段 bss 堆和棧組成,其中 段,資料段和bss段是編譯的時候由編譯器分配的,而堆和棧是程式執行的時候由系統分配的。在上圖中,由編譯器分配的位址空間都是在連線的時候...