一個用C實現的內存分配

       自我接觸軟件編程以來,在嵌入式方面編程所花的時間應該算是最長的吧,一直忍受着不能動態分配內存的困擾。懶惰促使我抓破腦袋去避免使用動態非內存即使可能移植性不好,可能存在隱患,誰叫我大部分都是在作比賽呢。終於在去年11月份寫一個大型算法實在忍無可忍,花了一下午時間瞭解了多年來的夙願。實現了大部分在標準C的動態內存分配函數(C代碼見附件),下面主要實現的函數:

/** @addtogroup System_Exported_Macros
  * @{
  */
#define MEM_BLOCK_SIZE   16			///< 內存塊大小爲16字節
#define MAX_MEM_SIZE   	 (10*1024)		///< 最大管理內存 10K
/**
  * @}
  */
/** @addtogroup System_Exported_Functions
  * @{
  */
void atgMemDevInit(void);
void *atgMalloc(uint32_t nSize);
void *atgRealloc(void *pAddr,uint32_t nSize);
float atgMemPerused(void);
void atgMemFree(void *pAddr);
void atgMemcpy(void *pDst, const void *pSrc, uint32_t nSize);
void atgMemset(void *pAddr, uint8_t val, uint32_t nSize);
/**
  * @}
  */
還是簡單描述一下用法和調用流程吧:使用本模塊首先需要在atgManagementLib.h中設定宏MAX_MEM_SIZEMEM_BLOCK_SIZE定義自由分配內存的大小和內存塊的大小。然後調用初始化函數atgMemDevInit初始化整個模塊,接下來的使用就和C語言默認的內存分配函數類似了。還是給一個使用實例吧:
int main(void)
{
    int *p = NULL;
    atgMemDevInit();	///< 初始化內存管理模塊
    ......
    p = (int *)atgMalloc(sizeof(int) * 10);	///< 分配空間
    ......
    atgMemFree(p);	///< 釋放空間
    ......
    return 0;
} 
好了就到這兒吧,希望對有需求的盆友有幫助。雖然代碼是經過嚴格的測試,但鑑於鄙人才疏學淺,如果BUG還希望大家原諒並給與指正啊,呵呵……
附件下載地址
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章