一个用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还希望大家原谅并给与指正啊,呵呵……
附件下载地址
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值