動態記憶體的分配

2022-09-19 21:57:19 字數 922 閱讀 8940

在宣告陣列的時候,我們需要考慮陣列應該有多大?在很多的情況下,我們並不清楚要定義的這個陣列到底有多大,此時我們就要把陣列定義得足夠大。這樣程式在執行時就申請了固定大小的足夠大的記憶體空間。但是如果程式需要的元素比較少時,記憶體空間就被浪費掉了。少數情況下我們定義的陣列不夠大,這時候就可能引起下標越界錯誤。這是時候可以用動態記憶體分配就可以解決上面的問題. 所謂動態記憶體分配就是指在程式執行的過程中動態地分配或者**儲存空間的分配記憶體的方法。動態記憶體分配不象陣列等靜態記憶體分配方法那樣需要預先分配儲存空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。

c函式庫提供了兩個函式,malloc 和 free,分別用於執行動態記憶體分配和釋放。原型如下所示:

void   *malloc( size_t  size);

void    free( void  *pointer);

malloc的引數就是需要分配的記憶體位元組(字元)數。若記憶體池中可用記憶體可以滿足需求,malloc就返回乙個指向被分配的記憶體塊起始位置的指標,當可用記憶體無法滿足要求時就會返回乙個null指標。因此每個從malloc返回的指標都要檢查確保它非null。

free的引數必須要麼是null,要麼是乙個先前從malloc、calloc或realloc返回的值。

另外還有兩個記憶體分配函式,calloc 和 realloc。原型如下所示:

void   *calloc( size_t  num_elements, size_t element_size);

void    realloc( void  *ptr, size_t  new_size);

calloc也用於分配記憶體。它在返回指向記憶體的指標前把它初始化為0。

realloc函式用於修改乙個原先已經分配的記憶體塊的大小。如果擴大記憶體塊,原來的內容保留,新加的添到原先的後面。如果縮小記憶體塊,該記憶體尾部的部分記憶體被拿掉,剩餘部分原先內容依然保留。

動態記憶體分配

在c 中建立乙個物件時,我們必須要為這個物件申請一塊記憶體,而且要用建構函式對這塊記憶體進行初始化。c 中的new和delete相對於c的庫函式malloc和free在這方面有很大的優勢,所以我們主要講的是運算子new和delete。當用new來建立乙個物件時,它會自動在堆裡為物件分配記憶體並且為這...

動態記憶體分配

為什麼使用動態記憶體分配?c語言中的一切操作都是基於記憶體的 變數和陣列都是記憶體的別名,如何分配這些記憶體由編譯器在編譯期間決定 定義陣列的時候必須指定陣列唱的 而陣列長度是在編譯期就必須決定的 需求 程式執行的過程中,可能需要使用一些額外的記憶體空間 malloc和free malloc和fre...

動態記憶體分配

c的儲存類別有4種 自動的 auto 靜態的 statics 暫存器的 register 外部的 extern 全域性變數時分配在記憶體中的靜態儲存區 靜態區域性變數屬於靜態儲存類別,在靜態儲存區內分配儲存單元,是在編譯時賦初值的,只賦初值一次,在程式執行時它已有初值,以後每次呼叫函式時不再重新賦初...