C/C++內存分配和管理


1. 內存分配和管理

1.1 malloc、calloc、realloc、alloca

  1. malloc:申請指定字節數的內存。申請到的內存中的初始值不確定。
  2. calloc:為指定長度的對象,分配能容納其指定個數的內存。申請到的內存的每一位(bit)都初始化為 0。
  3. realloc:更改以前分配的內存長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另一個足夠大的區域,而新增區域內的初始值則不確定。
  4. alloca:在棧上申請內存。程序在出棧的時候,會自動釋放內存。但是需要注意的是,alloca 不具可移植性, 而且在沒有傳統堆棧的機器上很難實現。alloca 不宜使用在必須廣泛移植的程序中。C99 中支持變長數組 (VLA),可以用來替代 alloca。

1.2 malloc、free

用於分配、釋放內存

malloc、free 使用

申請內存,確認是否申請成功

char *str = (char*) malloc(100);
assert(str != nullptr);

釋放內存后指針置空

free(p); 
p = nullptr;

1.3 new、delete

  1. new / new[]:完成兩件事,先底層調用 malloc 分配了內存,然后調用構造函數(創建對象)。
  2. delete/delete[]:也完成兩件事,先調用析構函數(清理資源),然后底層調用 free 釋放空間。
  3. new 在申請內存時會自動計算所需字節數,而 malloc 則需我們自己輸入申請內存空間的字節數。

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM