C語言動態記憶體分配,malloc free

2021-10-12 13:53:59 字數 1050 閱讀 8199

涉及到分配動態記憶體時,往往是應用在陣列上,也會在結構體上應用。說下為什麼在陣列上比較常用吧。

在定義陣列時,必須要指定大小,而且其所有元素在記憶體上是連續儲存的。

可是我們所要儲存的目標資料經常是在程式執行起來之後才會知道具體大小,這也就導致了經常在定義陣列時,選擇直接定義乙個比較大的size,可是往往伴隨而來的就是記憶體空間的浪費。還有就是如果陣列的實際儲存資料超過陣列的空間大小,會直接引發異常

函式原型:

void *malloc( size_t size );

void free(void *pointer);

這是c語言函式庫提供的兩個動態記憶體管理函式,分別用於執行動態記憶體的分配與釋放,用於維護一片可用的記憶體池,而malloc函式則是可以向這片記憶體池申請一定大小的記憶體空間,所以在設計程式時,可以在計算出所需儲存空間size的情況下,利用malooc函式申請記憶體,用來儲存資料。

malloc申請動態記憶體後,會返回這片記憶體的指標,且是乙個void *指標,所以申請的這片記憶體,可以根據自己的需要儲存任意型別的資料。

因為malloc申請的記憶體是連續的,所以會有記憶體池的記憶體咩有符合條件的狀況,這時malloc會向作業系統進行請求,請求分配一塊新的記憶體,並在這裡儲存資料。換句話說,如果malloc都不能給你記憶體了,那麼就是你的記憶體池,你的作業系統的記憶體幾乎占用的所剩無幾了。這時由於申請失敗,返回的指標為null,所以每次執行申請動態記憶體後判別返回地指標是否為null就相當重要了。

malloc函式的引數是需要分配的位元組數,這裡值得注意。

而free函式則是將不再使用的由malloc申請的記憶體釋放掉,即還給記憶體池或者作業系統,其引數是乙個指標,但是必須是malloc、calloc、realloc這類申請記憶體的函式的返回值或者是乙個null指標,但是當引數時null指標時,執行free函式,不會產生任何現象。

補充一點,malloc函式申請的記憶體由於是連續的,而且還是以位元組的形式的,所以是嚴格符合邊界對齊的。

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

malloc函式 動態記憶體分配

malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的 指標。c,c 規定,void 型別可以 強制轉換 為任何其它型別的指標。原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2....

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...