關於動態記憶體分配函式的優化

2021-09-19 22:02:15 字數 1294 閱讀 9363

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....