C語言學習筆記 動態記憶體分配

2022-06-25 19:48:10 字數 2399 閱讀 9365

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

(2)變數和陣列都是記憶體的別名。

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

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

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

(3)但是程式執行的過程中,可能需要使用一些額外的記憶體空間

(1)malloc 和 free 用於執行動態記憶體分配的釋放

(2)malloc 所分配的是一塊連續的記憶體

(3)malloc 以位元組為單位,並且返回值不帶任何的型別資訊:void* malloc(size_t size);

(4)free 用於將動態記憶體歸還系統:void free(void* pointer);

(5)_msize(void* pointer)可以獲取 malloc 出來的記憶體空間大小

(1)malloc 和 free 是庫函式,而不是系統呼叫

(2)malloc 實際分配的記憶體可能有會比請求的多,但不能依賴於不同平台下的 malloc 行為。

(3)當請求的動態記憶體無法滿足時,malloc 返回 null

(4)當 free 的引數為 null 時,函式直接返回

malloc(0)返回什麼?

#include #include 

intmain()

return0;

}

記憶體洩漏檢測模組

mleak.h

#ifndef _mleak_h_

#define _mleak_h_#include

#include

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

#define free(p) freeex(p)

void* mallocex(size_t n, const

char* file, const

line);

void freeex(void*p);

void

print_leak_info();

#endif

mleak.c

#include "

mleak.h

"#define size 256

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

typedef struct

mitem;

static mitem g_record[size]; //

記錄每個動態記憶體申請的操作

void* mallocex(size_t n, const

char* file, const

line)}}

return

ret;

}void freeex(void*p)}}

}void

print_leak_info()

}}

testc.

#include #include 

"mleak.h

"void

f()int

main()

/*輸出結果:

e:\study>gcc test.c mleak.c

e:\study>a.exe

potenital memory leak info:

address:00602ed8, size:100, location:38-1.c:7

*/

(1)malloc 的同胞兄弟:

void* calloc(size_t num, size_t size);

void* realloc(void* pointer,size_t new_size);

(2)calloc 引數表示要返回 num 個某種型別(如 sizeof(int))大小的記憶體空間。calloc 能以型別大小為單位申請記憶體並初始化為 0.

(3)realloc 用於修改乙個原先己經分配的記憶體塊大小。當第乙個引數 pointer 為 nul 時,等價於 malloc。

calloc 和 realloc 的使用

#include #include 

#define size 5

intmain()

printf(

"before: pi = %p\n

", pi); //

重置記憶體大小之前的pi指標

pi = (int*)realloc(pi, 2 * size * sizeof(int)); //

記憶體未初始化的

printf(

"after: pi = %p\n

", pi);

for (i = 0; i < 10;i++)

free

(pi);

free

(ps);

return0;

}

C語言學習筆記 動態記憶體分配

記憶體分割槽 說明 程式 區 code area 存放函式體的二進位制 靜態資料區 data area 也稱全域性資料區,包含的資料型別比較多,如全域性變數 靜態變數 一般常量 字串常量。其中 注意 靜態資料區的內存在程式結束後由作業系統釋放。堆區 heap area 一般由程式設計師分配和釋放,若...

c語言動態記憶體分配 C 動態記憶體分配

動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...

C語言動態記憶體分配

c語言動態記憶體分配 動態資料結構可以在執行時靈活新增 刪除或重排資料項。在執行時分配記憶體空間的過程稱為動態記憶體分配。記憶體分配函式如下 malloc 分配所需的位元組大小,並返回指向所分配空間的第乙個位元組的指標 calloc 為元素陣列分配空間,並初始化為零,然後返回指向該記憶體的指標 fr...