C語言動態記憶體管理和動態記憶體分配
阿新 • • 發佈:2019-08-21
動態記憶體管理同時還具有一個優點:當程式在具有更多記憶體的系統上需要處理更多資料時,不需要重寫程式。標準庫提供以下四個函式用於動態記憶體管理:
(1) malloc()、calloc()
分配新的記憶體區域。
(2) realloc()
調整已分配的記憶體區域。
(3) free()
釋放已分配的記憶體區域。
上述所有函式都宣告在標頭檔案 stdlib.h 中。物件在記憶體中所佔空間的大小是以位元組數量為單位計算的。許多標頭檔案(包括 stdlib.h)專門定義了型別 size_t 用來儲存這種記憶體空間的相關資訊。例如,sizeof 運算子以型別 size_t 返回位元組數量。
動態記憶體分配
兩個記憶體分配函式 malloc()和 calloc()的引數不一樣:
void*malloc(size_t size);
函式 malloc()分配連續的記憶體區域,其大小不小於 size。當程式通過 malloc()獲得記憶體區域時,記憶體中的內容尚未決定。
void*calloc(size_t count,size_t size);
函式 calloc()分配一塊記憶體區域,其大小至少是 count_size。換句話說,上述語句分配的空間應足夠容納一個具有 count 個元素的陣列,每個元素佔用 size 個位元組。而且,calloc()會把記憶體中每個位元組都初始化為 0。
兩個函式都返回 void 指標,這種指標被稱為無型別指標(typeless pointer)。返回指標的值是所分配記憶體區域中第一個位元組的地址,當分配記憶體失敗時,返回空指標。
作者:周夢康
原文連結
本文為雲棲社群原創內容,未經