前两天遇到了一个需求: 是每次申请一块内存空间 需要的首地址必须要是4的倍数
于是瞬间就想到了这不是就是在应用层重新封装一下malloc 和free 嘛,或者你自己实现一个应用层的内存池自己来管理内存空间的地址分配,等等 实现方法很多,使用者的需求就是只要我申请到的空间我可以使用并且给我返回的首地址必须是4的倍数,于是c语言的结构体内存对齐,以及malloc和free的实现方式以及stl内存池以及其他内存池实现的方式都会成为我们实现这个需求的参考。
思考良久最终选择了一个最简便的方式,就是通过封装malloc和free 于是我们需要考虑最主要的问题是:
1.怎样保证申请内存是4的倍数
于是我们想到可以找到当前申请到的内存地址最近的4的倍数的内存地址作为我们返给上层使用这个接口的地址 也就是比如我们当前的地址是0 我们就直接返回 是1 就返回1+3=4 2 就返回2+2=4 等等 但是这样中间的一些内存就不会被使用到 并且用户得到的内存空间不够,于是我们要在用户申请内存空间的基础上多申请4个空间,这样通过多余的这4个空间来保证用户可以得到地址是4的倍数。
2.如何释放
那么当前malloc 和free 知道的地址是自己真正得到的地址,我们给用户的地址是真正申请空间中的一部分,这个地址如果直接传给free