從malloc/free和new/delete的不同入手,談談C/C++的內存管理

malloc / free

兩者都是C語言標準庫cstdlib中的系統調用函數,在C++中這個庫成了stdlib.h 。

  • void *malloc(size_t size);
    malloc函數從內存中分配一段長度爲size的連續內存,並返回這段連續內存空間的首地址,賦值給等號左方的指針變量。使用如:
int *ptr = (int *)malloc(10*sizeof(int));  // 分配一個長度爲10的int數組
char *cptr = (char *)malloc(1*sizeof(char)); //分配一個字節的空間給char變量
  • void free (void* ptr);
    free函數則用來回收malloc分配過的內存空間。將要回收的內存空間塊的指針作爲參數傳入即可。調用完free函數,這個傳參進去的指針變量就指向一個任意值了,通過這種手段就把那一段內存回收了。使用如:
free(ptr);
free(cptr);

這兩者都是非常底層的內存管理了。

new / delete

new和delete是C++中用於管理堆內存的兩個運算符。

  • new運算符進行動態內存申請時,包含兩個階段:
  1. 內存申請 new。內存new 基本就是通過 malloc 進行動態內存申請,但是本步驟並不初始化內存。本步驟對應 operator new(size_t ) 函數。
  2. 構造函數。
  • delete運算符進行內存釋放時,包含兩個階段:
  1. 析構對象。
  2. 內存釋放 delete。本步驟對應operator delete(void*) 函數。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章