動態記憶體分配

2021-08-17 06:35:12 字數 1363 閱讀 2726

c語言中一切操作都是基於記憶體的

變數和陣列都是記憶體的別名

記憶體分配由編譯器在編譯期決定

定義陣列的時候必須指定陣列長度

陣列長度是在編譯器就必須確定的

程式在執行的過程中,可能會使用一些額外的記憶體空間,需要通過malloc 和 free

malloc所分配的是一塊連續記憶體,以位元組為單位,並且不帶任何的型別資訊

malloc實際分配的記憶體可能會比請求的多

當動態記憶體無法滿足是malloc返回null

當free引數為null時,函式直接返回

malloc(0); 也會返回乙個位址

#ifndef _mleak_h_

#define _mleak_h_

#include

#define malloc(n) mallocex(n, __file__, __line__)

#define free(p) freeex(p)

void* mallocex(size_t n, const

char* file, const

int line);

void freeex(void* p);

void print_leak_info();

#endif

#include "mleak.h"

#define size 256

/* 動態記憶體申請引數結構體 */

typedef

struct

mitem;

static mitem g_record[size]; /* 記錄動態記憶體申請的操作 */

void* mallocex(size_t n, const

char* file, const

int line)}}

return ret;

}void freeex(void* p)}}

}void print_leak_info()

}}

#include 

#include "mleak.h"

void f()

int main()

void* calloc(size_t num,size_t size);  //calloc 會將返回的記憶體初始化為0

short* ps = (short*)calloc(1,sizeof(short));

void* realloc(void* pointer,size_t new_size); //用於修改原先已經分配的記憶體大小,當第乙個引數為null時,等價於malloc

動態記憶體分配

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

動態記憶體分配

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

動態記憶體分配

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