C語言——內存分配

爲什麼要使用動態分配內存

當你聲明數組時,你必須使用一個編譯時常量指定數組的長度,但是,數組的長度通常在運行時才知道,這是由於他的內存空間取決於輸入數據。但是如果程序需要使用的元素數量超過了聲明的長度,就必須要通過執行動態分配內存。

malloc

當一個程序需要另外的內存時,它就調用malloc函數,malloc從內存池中提取一塊合適的內存,並向該程序返回一個指向該內存的指針。這塊內存並沒有以任何方式進行初始化,如果對這塊內存初始化非常重要,你需要自己進行初始化。
malloc的參數是需要分配內存的字節數,malloc分配的是一塊連續的內存,如果操作系統無法向malloc提供更多的內存,malloc就返回NULL。

void *malloc(size_t size)

calloc

void *calloc(size_t num_elements,size_t elements_size);

calloc也用於分配內存。與malloc的主要區別是calloc在返回指向內存指針之前把他初始化爲0.這個初始化常常能帶來方便,但是如果你的程序只是想把一些值存儲在數組,那麼這個初始化過程就是浪費時間;另一個區別是,他們請求內存的方式不同,calloc的參數包括所需元素的數量以及每個元素的字節數

realloc

void realloc(void *ptr,size_t new _size);

realloc用於修改一個已經分配的內存塊的大小,你可以使一塊內存擴大或縮小。如果用於擴大一塊內存,那麼這塊內存原先的數據沒有變化,新增的內存添加到原先的內存塊後面,新內存並沒有以任何方法進行初始化。如果用於縮小,該內存塊尾部的部分內存便被拿掉。如果原先的內存塊無法改變大小,realloc將會分配另一塊正確大小的內存,並把原先那塊內存的內容複製到這塊內存上。如果realloc函數的第一個參數是NULL,那麼它的行爲就會和malloc一樣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章