1. 程式人生 > >C語言動態記憶體管理和動態記憶體分配

C語言動態記憶體管理和動態記憶體分配

動態記憶體管理同時還具有一個優點:當程式在具有更多記憶體的系統上需要處理更多資料時,不需要重寫程式。標準庫提供以下四個函式用於動態記憶體管理:

(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)。返回指標的值是所分配記憶體區域中第一個位元組的地址,當分配記憶體失敗時,返回空指標。

作者:周夢康

原文連結

本文為雲棲社群原創內容,未經