動態記憶體函式介紹
void
*malloc
(size_t size)
;
這個函式向記憶體事情一塊連續可用的空間,並返回指向這塊空間的指標。如果開闢成功,則返回乙個指向開闢好的空間的指標。
如果開闢失敗,則返回乙個null指標,因此malloc的返回值一定要做檢查。
返回值的型別是void*,所以malloc函式並不知道開闢空間的型別,使用時候強轉為自己需要的型別。
如果size為0,malloc的行為是標準未定義的,取決於編譯器。
void
free
(void
*ptr)
;
free函式用來釋放動態記憶體開闢的記憶體malloc和free都宣告在標頭檔案stdlib.h標頭檔案中如果引數ptr指向的空間不是動態開闢i的,那麼free函式的行為是未定義的。
如果引數ptr是null指標,則函式什麼事都不會做。
void
*calloc
(size_t num,size_t size)
;
函式的功能是為num個大小size的元素的開闢一塊空間,並把空間的每個位元組初始化為0.與malloc函式的區別只在於calloc會在返回位址之前把申請的空間的每個位元組初始化為0。
realloc函式的出現讓動態記憶體管理更加靈活。realloc函式就可以做到對動態開闢記憶體大小的調整。
函式原型:
void
*realloc (
void
*ptr,size_t size)
;//ptr是要調整的記憶體位址
//size調整之後新大小
//返回值為調整之後的記憶體起始位置
這個函式調整原記憶體空間大小的基礎上,還會將原來記憶體中的資料移動到新的空間。realloc在調整記憶體空間的是存在兩種情況:
a.情況1:原有空間之後有足夠大的空間
情況1要擴充套件記憶體就直接原有記憶體之後直接追加空間,原來的資料不發生變化。
b.情況2:原有空間之後沒有足夠大的空間
情況2原有空間沒有足夠多的空間時,擴充套件方法是在堆上另找乙個合適大小的連續空間來使用,這樣返回的是乙個新的記憶體位址,
動態記憶體管理
首先應該明白物件的三種內部的儲存方式 自動儲存,靜態儲存,和動態儲存。當執行離開當期程式塊的時候,堆疊指標返回到它進入程式塊 之前的地方,有效的銷毀了那個程式塊的自動變數。重新進入這個塊會再次建立所有的自動變數。靜態物件宣告或者在檔案域中。動態物件是存在系統呼叫 的在執行期中建立並且儲存在堆中,這是...
動態 記憶體管理
定義變數時,必須制定其資料型別和名字。而動態建立物件時,只需指定其資料型別,而不必為該物件命名。取而代之的是,new表示式返回指向新建立物件的指標,我們通過該指標來訪問此物件。int i int pi new int 這個new表示式在自由儲存區中分配建立了乙個整型物件,並返回此物件的位址,並用該位...
動態記憶體管理
c語言使用malloc calloc realloc free進行動態記憶體管理。void test c 通過new和delete動態管理記憶體。new delete動態管理物件。new delete動態管理物件陣列。void test void test int globalvar 1 stati...