1、c語言中的一切操作都是基於記憶體的
2、變數和陣列都是記憶體的別名
1)、記憶體分配由編譯器在編譯期間決定
2)、定義陣列的時候必須指定陣列的長度
3)、陣列的長度是在編譯期間就必須確定的
1、malloc和free用於執行動態記憶體分配和釋放
2、malloc所分配的是一塊連續的記憶體
3、malloc是以位元組為單位,並且不帶任何的型別資訊
4、free用於將動態記憶體歸還給系統
函式原型
void
*malloc
(size_t size)
;void
free
(void
* pointer)
;
1、malloc和free是庫函式,而不是系統呼叫的
2、malloc實際分配的記憶體可能比請求的多
3、不能依賴於不同於平台下的malloc行為
4、當求其的動態記憶體無法滿足是malloc返回null
5、當free的引數為null時,函式直接返回
1、malloc的同胞兄弟
函式原型
void
*calloc
(size_t num, size_t size)
;void
*realloc
(void
* pointer, size_t new_size)
;
2、calloc的引數代表所返回記憶體的型別資訊
1)、calloc會將返回的記憶體初始化為零
3、realloc用於修改乙個原先已經分配的記憶體塊大小
1)、在使用realloc之後應該使用其返回值
2)、當pointer的第乙個引數為null時,等價於malloc
例項分析:
#include
#include
#define size 5
intmain()
printf
("before: pi = %p\n"
, 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;
}
1、動態記憶體分配是c語言中的強大的功能
2、程式能夠在需要的時候有機會使用更多的記憶體
3、malloc單純的從系統中申請固定位元組大小的記憶體
4、calloc能以型別大小為單位申請記憶體並初始化為零
5、realloc用於重置記憶體的大小
附錄**:
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()
}}
附錄**:
mleak.h
#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 line)
;void
freeex
(void
* p)
;void
print_leak_info()
;#endif
C語言 動態記憶體
動態記憶體 動態的建立記憶體,申請記憶體空間為變數 存放於堆區,不能通過變數名或陣列名引用,只能通過指標引用,在windows中,堆中最大的連續記憶體塊為1.3g左右。標頭檔案 includemalloc 在空閒記憶體中分配連續記憶體,約等於2g,分配成功時返回乙個指向該記憶體塊的指標即第乙個位元組...
c語言動態記憶體分配 C 動態記憶體分配
動態記憶體分配 雖然通過陣列就可以對大量的資料和物件進行有效地管理,但是很多情況下,在程式執行之前,我們並不能確切地知道陣列中會有多少個元素。這種情況下,如果陣列宣告過大,就會造成浪費 宣告過小,就會影響處理。在c 中,動態記憶體分配技術可以保證程式在執行過程中按照需要申請適量記憶體,使用後釋放,從...
資料儲存 動態記憶體申請和釋放(c語言)
函式宣告 返回為 void 型別 void malloc size t size 需要的標頭檔案 include 或 include 應用 指標 型別 變數名 指標 型別 malloc n sizeof 型別 指標 型別 強轉為同變數型別 如 int arr int malloc n sizeof ...