動態記憶體分配

動態記憶體分配

在c/c++語言中,編寫程式有時不能確定數組應該定義為多大,因此這時在程式運行時要根據需要從系統中動態多地獲得記憶體空間。所謂動態記憶體分配,就是指在程式執行的過程中動態地分配或者回收存儲空間的分配記憶體的方法。動態記憶體分配不像數組等靜態記憶體分配方法那樣需要預先分配存儲空間,而是由系統根據程式的需要即時分配,且分配的大小就是程式要求的大小。

基本介紹

  • 中文名:動態記憶體分配
  • 定義:動態地分配或回收存儲空間的方法
  • C語言:malloc、calloc和 free 函式
  • C++語言:運算符new、運算符delete
  • 特點:由系統根據程式的需要即時分配
  • 所屬學科:信息科學
C語言函式,malloc 函式,calloc函式,free 函式,函式運算符,new,delete,

C語言函式

C語言允許建立記憶體動態分配區域,以存放一些臨時用的數據,這些數據不必在程式的聲明部分定義,也不必等到函式結束時才釋放,而是需要時隨時開闢,不需要時隨時釋放。C語言中,記憶體的動態分配是通過系統提供的庫函式來實現的,主要有malloc、calloc和 free 函式。

malloc 函式

其函式原型為
void *malloc(unsigned int size);
其作用是在記憶體的動態存儲區中分配一個長度為size的連續空間。此函式的返回值是分配區域的起始地址,或者說,此函式是一個指針型函式,返回的指針指向該分配域的開頭位置。如:
malloc(100);/*開闢 100 個位元組的臨時分配域,返回值為其第一個位元組的地址*/
注意指針的基類型為 void,即不指向任何類型的數據,只提供一個地址。如果此函式未能成功的執行(例如記憶體空間不足),則返回空指針(NULL)。

calloc函式

函式原型為
void *calloc(unsigned n, unsigned size)
其作用是在記憶體的動態存儲區中分配n個長度為 size 的連續空間。函式返回一個指向分配區域的起始位置的指針;如果分配不成功,則返回NULL。
採用 calloc 函式可以為一維數組開闢動態存儲空間,n 為數組元素個數,每個元素長度為 size,這就是動態數組。如:
p = calloc(50,4) /*開闢 50*4個位元組的臨時分配域,把起始地址賦給指針變數p */

free 函式

函式原型為
void free(void*p);
其作用是釋放指針 p 所指向的動態空間,使這部分空間能被其他變數使用。p 是最近一次調用 calloc 或malloc 函式時的返回值。free函式無返回值。如:
free(p);/*釋放指針變數p指向的已分配的動態空間*/
上述三個函式在頭檔案malloc.h和 stdlib.h 中定義。若要使用,必須在程式的開始將頭檔案用檔案包含命令放到本檔案中來。

函式運算符

new

運算符new用於向系統申請動態存儲空間,並把首地址作為運算結果,它的使用形式為:
指針變數=new 數據類型;
例如:
int *p=new int
該語句的作用是會用new從記憶體中申請了一個int型變數(4個位元組),並將該變數的首地址賦給指針變數p。
new所建立的變數的初始值是任意的,也可在用new分配記憶體的同時進行初始化。使用形式為:
指針變數=new 數據類型(初始值)。

delete

堆記憶體可按照要求進行分配,程式對記憶體的需求量隨時會發生變化,有時程式在運行種可能會不再需要由new分配的記憶體空間,而且程式還未運行結束,這時就需要把先前占用的記憶體空間釋放給堆記憶體,以後重新分配,供程式的其他部分使用。運算符delete用於釋放new分配的記憶體空間,刪除建立的對象,它的使用形式為:
delete 指針變數
其中的指針變數中保存著new分配的記憶體的首地址。

相關詞條

熱門詞條

聯絡我們