嵌入式ARM程序高级调试技能:22.malloc free 的wrap实现,free支持 align free
以下是实现
malloc
和
free
的包装器(wrapper)的代码,其中
free
支持对齐释放(align free)。该实现通过记录分配的内存地址和对应的对齐方式,确保在释放时能正确处理对齐内存。
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
// 内存块头部信息(存储分配的对齐方式)
typedef struct {
size_t alignment;
} AlignedHeader;
// 包装的malloc函数,支持对齐分配
void* aligned_malloc(size_t size, size_t alignment) {
// 检查对齐值是否为2的幂(对齐要求)
if (alignment & (alignment - 1) || alignment == 0) {
return NULL; // 无效对齐值
}
// 计算需要分配的总内存:头部 + 对齐填充 + 用户数据
size_t header_size = sizeof(AlignedHeader);
size_t total_size = size + header_size + alignment - 1;