c語言為記憶體的分配和管理提供了幾個函式。這些函式可以在標頭檔案中找到。
void calloc(int num, int size);
在記憶體中動態地分配num個長度為size的連續空間,並將每乙個位元組都初始化為0。所以他的結果是分配了numsize個位元組長度的記憶體空間,並且每個位元組的值都是0。
void *free(void *address);
該函式釋放address所指向的記憶體塊,釋放的是動態分配的記憶體空間。
void *malloc(int num);
在堆分配一塊指定大小的記憶體空間,用來存放資料。這塊記憶體空間在函式執行完後不會被初始化,他們的值是未知的。
void *realloc(void address, int newsize);
該函式重新分配記憶體,把記憶體擴充套件到newsize。
【void 表示未確定型別的指標。c/c++規定void型別可以通過型別轉換強制轉換為任意其他型別的指標】
程式設計時,如果預先知道陣列大小,那麼定義陣列時就比較容易。例如,乙個儲存人名的陣列,它最多容納100個字元,那麼定義陣列的時候就可以使 char name[100];
但是,如果您預先不知道需要儲存的文字長度,就需要定義乙個指標,該指標指向未定義所需要記憶體大小的字元,後續再根據需求來分配記憶體
/動態分配記憶體/
description = (char )malloc(200sizeof(char));
也可以用calloc來編寫,只需要把malloc替換成calloc
calloc(200*sizeof(char));
重新調整記憶體的大小和釋放記憶體
當程式退出時,作業系統會自動自動釋放所有分配給程式的記憶體,但是,建議您在不需要記憶體時,都應該呼叫函式free()來釋放記憶體。
或者,您可以通過呼叫函式realloc()來增加或減少記憶體塊的大小。讓使用realloc()和free()函式
/假設想要儲存更大的描述資訊/
description = (cahr )realloc(description, 100sizeof(char));
/使用free()函式釋放記憶體/
free(description)
【對於手動分配記憶體,在c語言中是不用強制轉換型別的,但是c++強制要求型別轉換,不然會報錯】
c語言記憶體管理
在c語言中,根據資料在記憶體中存在的時間 生存期 不同,將記憶體空間分為三個區 1.程式區 用於儲存程式的 即程式的二進位制 存放函式體的二進位制 2.靜態儲存區 用於儲存全域性變數和靜態變數,這些變數的空間在程式編譯時就已經分配好了.全域性變數和靜態變數的儲存是放在一塊的,初始化的全域性變數和靜態...
C語言 記憶體管理
對於任何的作業系統來說,記憶體都是很寶貴的乙個地方。所以,對於程式語言來說,記憶體管理就顯得尤為重要。c語言 在記憶體中執行的時候,我們大致將占用的記憶體分為4塊區域 區 靜態區 棧區 堆區。這4各區域,有著各自的特點,他們也儲存著我們的程式在執行中的不同型別的資料。弄明白了這4個區域的資料儲存特點...
C語言 記憶體管理
記憶體管理一號傳送門 記憶體管理二號傳送門 對於乙個c語言程式而言,記憶體空間主要由五個部分組成 段 text 資料段 data bss段 bss 堆和棧組成,其中 段,資料段和bss段是編譯的時候由編譯器分配的,而堆和棧是程式執行的時候由系統分配的。在上圖中,由編譯器分配的位址空間都是在連線的時候...