C C 記憶體分配和管理

2021-09-19 15:50:04 字數 755 閱讀 7470

malloc:申請指定位元組數的記憶體。申請到的記憶體中的初始值不確定。

calloc:為指定長度的物件,分配能容納其指定個數的記憶體。申請到的記憶體的每一位(bit)都初始化為 0。

realloc:更改以前分配的記憶體長度(增加或減少)。當增加長度時,可能需將以前分配區的內容移到另乙個足夠大的區域,而新增區域內的初始值則不確定。

alloca:在棧上申請記憶體。程式在出棧的時候,會自動釋放記憶體。但是需要注意的是,alloca 不具可移植性, 而且在沒有傳統堆疊的機器上很難實現。alloca 不宜使用在必須廣泛移植的程式中。c99 中支援變長陣列 (vla),可以用來替代 alloca。

用於分配、釋放記憶體

malloc、free 使用

申請記憶體,確認是否申請成功

char *str = (char*) malloc(100

);assert(str != nullptr);

釋放記憶體後指標置空

free

(p);

p = nullptr;

delete/delete:也完成兩件事,先呼叫析構函式(清理資源),然後底層呼叫 free 釋放空間。

new 在申請記憶體時會自動計算所需位元組數,而 malloc 則需我們自己輸入申請記憶體空間的位元組數。

posted @

2019-03-29 13:49

douzujun 閱讀(

...)

編輯收藏

C C 記憶體分配

1 c c 記憶體分配 1 棧區 由編譯器自動分配和釋放,存放函式的引數值,區域性變數的值等。其操作方式類似於資料結構中的棧。2 堆區 一般由程式設計師分配和釋放,若程式設計師不釋放,程式結束時可能由os 注意它與資料結構中的堆是兩回事。3 全域性 靜態 資料區 全域性變數和靜態變數的儲存是放在一塊...

C C 記憶體分配

記憶體分配方式 記憶體分配方式有三種 1 從靜態儲存區域分配。內存在程式編譯的時候就已經分配好,這塊內存在程式的整個執行期間都存在。例如全域性變數,static 變數。2 在棧上建立。在執行函式時,函式內區域性變數的儲存單元都可以在棧上建立,函式執行結束時這些儲存單元自動被釋放。棧記憶體分配運算內置...

C C 記憶體分配

一 c c 記憶體分配 c c 語言中,記憶體主要分配在一下五個儲存區 1.棧 棧中儲存區域性變數以及函式實參,由編譯器負責分配釋放,函式結束,棧中資料失效。2堆 一般由程式設計師分配釋放,若程式設計師不釋放,程式結束時可能由 os 分配方式類似於鍊錶。3全域性區 靜態區 存放全域性變數以及靜態變數...