基于N字节对齐的内存分配与归还

在某些特定的场合下,cpu需要分配的内存地址,自动对齐在N(2的若干次方)边界,因此需要内存分配函数具有自动调整边界能力。

void * malloc_align(int req_size, int algn_len)

{

    int *p1 = (int *)malloc(req_size + algn_len + sizeof(int));

    int *p2 = (int *)(((int)p1 + algn_len + sizeof(int)) & ~(algn_len -1)); //p2 为p1 调整在algn_len 边界后的位置;

    *(p2 -1) = (int)p1; //保存原始的内存分配后的原始位置,以便对齐归还;

    return p2;

}

 

void free_align(void *p)

{

    free((int *)(*(p -1))); //p -1 得到存放的原始指针;

}

指针对齐在内存分配的时候会导致存在少量内存浪费。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值