動態內存管理同時還具有一個優點:當程序在具有更多內存的系統上需要處理更多數據時,不需要重寫程序。標準庫提供以下四個函數用於動態內存管理:
(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)。返回指針的值是所分配內存區域中第一個字節的地址,當分配內存失敗時,返回空指針。