C之動態記憶體分配

2021-09-20 06:18:33 字數 1404 閱讀 7819

在編寫程式時,通常並不知道需要處理的資料量,或者難以評估所需處理資料量的變動程度。在這種情況下,要達到有效的資源利用,必須在執行時動態地分配所需記憶體,並在使用完畢後盡早釋放不需要的記憶體,這就是動態記憶體管理原理。

參考文章:

[1] c語言動態記憶體管理和動態記憶體分配

標準庫stdlib.h提供以下四個函式用於動態記憶體管理:

(1) malloc()、calloc():分配新的記憶體區域

(2) realloc():調整已分配的記憶體區域

(3) free():釋放已分配的記憶體區域

物件在記憶體中所佔空間的大小是以位元組數量為單位計算的。許多標頭檔案(包括 stdlib.h)專門定義了型別 size_t 用來儲存這種記憶體空間的相關資訊。例如,sizeof 運算子以型別 size_t 返回位元組數量。

兩個記憶體分配函式 malloc()和 calloc()的引數不一樣:

① malloc( )

void*malloc(size_t size);
#include #include int main()

printf("hello world!\n");

free(ptr);

return 0;

}

輸出:

② calloc( )

void*calloc(size_t count,size_t size);
#include #include int main()

printf("hello world!\n");

free(ptr);

return 0;

}

輸出:初始值為0

兩個函式都返回 void 指標,這種指標被稱為無型別指標(typeless pointer)。返回指標的值是所分配記憶體區域中第乙個位元組的位址,當分配記憶體失敗時,返回空指標。

當程式將這個 void 指標賦值給不同型別的指標變數時,編譯器會隱式地進行相應的型別轉換。然而,一些程式設計師傾向於使用顯式型別轉換。當獲取所分配的記憶體位置時,所使用的指標型別決定了該如何翻譯該位置的資料。

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

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

c 動態記憶體分配

c語言中提供的動態記憶體分配為了解決陣列的靜態的分配方式的問題 即陣列大小必須在定義時指定,程式在執行時不能動態改變陣列的大小 在標準庫中提供了三個動態記憶體分配的函式供程式呼叫,下面將分別對這三個函式進行介紹 1.void malloc size t size malloc 在分配一段連續的記憶體...

C 動態記憶體分配

c 動態記憶體分配 c c 定義了4個記憶體區間 區,全域性變數與靜態變數區,區域性變數區即棧區,動態儲存區,即堆 heap 區或自由儲存區 free store 堆的概念 通常定義變數 或物件 編譯器在編譯時都可以根據該變數 或物件 的型別知道所需記憶體空間的大小,從而系統在適當的時候為他們分配確...