1. 內存分配和管理
1.1 malloc、calloc、realloc、alloca
- malloc:申請指定字節數的內存。申請到的內存中的初始值不確定。
- calloc:為指定長度的對象,分配能容納其指定個數的內存。申請到的內存的每一位(bit)都初始化為 0。
- realloc:更改以前分配的內存長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另一個足夠大的區域,而新增區域內的初始值則不確定。
- 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
- new / new[]:完成兩件事,先底層調用 malloc 分配了內存,然后調用構造函數(創建對象)。
- delete/delete[]:也完成兩件事,先調用析構函數(清理資源),然后底層調用 free 釋放空間。
- new 在申請內存時會自動計算所需字節數,而 malloc 則需我們自己輸入申請內存空間的字節數。