alloc.h
#define malloc //不要直接呼叫malloc
#define malloc(num, type) (type*)alloc((num)*sizeof(type))
extern void *alloc(size_t size);
alloc.c
#include #include "alloc.h"
#undef malloc
void* alloc(size_t size)
return new_mem;
}//free函式可以輸入null指標,但肯定不是我們所需要的
#define free(p) do \
free(p); \
}while(0u)
int main(void)
//***********記憶體管理****************
/*** @brief 分配乙個程式塊
* @param 指標的位址
* @param 待申請的區域大小
* @retval !0 申請成功 輸入指標為記憶體區首位址指標
* 0 申請失敗 輸入指標為null
*/u8 fnewmemory(void **ppv, size_t size)
/** * @brief 釋放申請的程式區
* @param 釋放區域的指標
* @param 釋放區域的大小
* @retval none
*/void freememory(void *pv)
/**
* @brief 重新分配程式塊的大小
* @param 重新分配區域的指標
* @param 重新分配區域的大小
* @retval !0 重新分配成功 輸入指標為新記憶體區首位址指標
* 0 申請失敗返回 原有位址指標不變
* @note 如果重新分配的大小小於原來的大小總會成功
*/u8 fresizememory(void **ppv, size_t size)
void memorytest(void)
else
freememory(p);
if( fresizememory(&p, 10) )
}
關於動態記憶體分配
動態記憶體分配方式在很多場合下有著重要的意義。動態分配使得記憶體的利用效率大大提高,在一些記憶體受限的情況下顯得極為重要。但是動態分配會帶來乙個問題,如何釋放。這個問題的關鍵就是,在釋放的時候,如何獲知這塊需要釋放的記憶體空間是多少位元組的。在文中,筆者談到new malloc 等方式動態分配的記憶...
12 關於動態記憶體分配
new關鍵字的功能類似於c語言中的malloc,它們都是從堆空間中申請一段記憶體。下面幾點是兩者之間的異同點 new是c 中的關鍵字,而malloc是c庫提供的函式,有些c編譯器可能是沒有這個庫的,那麼就會導致不能申請動態空間 new是以具體型別為單位進行記憶體分配,而malloc是以位元組為單位進...
malloc函式 動態記憶體分配
malloc 向系統申請分配指定size個位元組的記憶體空間。返回型別是 void 型別。void 表示未確定型別的 指標。c,c 規定,void 型別可以 強制轉換 為任何其它型別的指標。原型 extern void malloc unsigned int num bytes 標頭檔案 在tc2....