動態記憶體管理

2021-10-10 18:17:50 字數 1449 閱讀 3868

動態記憶體函式介紹

void

*malloc

(size_t size)

;

這個函式向記憶體事情一塊連續可用的空間,並返回指向這塊空間的指標。

如果開闢成功,則返回乙個指向開闢好的空間的指標。

如果開闢失敗,則返回乙個null指標,因此malloc的返回值一定要做檢查。

返回值的型別是void*,所以malloc函式並不知道開闢空間的型別,使用時候強轉為自己需要的型別。

如果size為0,malloc的行為是標準未定義的,取決於編譯器。

void

free

(void

*ptr)

;

free函式用來釋放動態記憶體開闢的記憶體

如果引數ptr指向的空間不是動態開闢i的,那麼free函式的行為是未定義的。

如果引數ptr是null指標,則函式什麼事都不會做。

malloc和free都宣告在標頭檔案stdlib.h標頭檔案中

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...