自定义对齐内存分配实现疑问及代码有效性验证
对齐内存分配的疑问与验证
对齐地址计算的疑问
针对16字节对齐的内存地址计算式:
((uintptr_t)mem+16-1) & ~ (uintptr_t)0x0F;
我对“分配1024字节内存天然满足16字节对齐”这一结论存疑——像1026、1029这类非16倍数的内存大小,是否需要先转为16的倍数才能保证内存地址对齐?
自定义对齐内存大小的代码验证
我编写了一段计算对齐内存大小的代码,用于验证思路:
#include <stdio.h> #include <stdlib.h> void myalignmalloc(size_t size, int align) { size_t ext = size % align; size_t alignsize = size - ext + align; // 计算得到对齐值倍数的内存大小 printf("size: %ld alignsize: %ld\n", size, alignsize); // TODO: 添加代码使用alignsize分配对齐内存 } //TODO: 实现对应的myfree函数 int main(void) { myalignmalloc(1031, 16); myalignmalloc(1031, 32); myalignmalloc(1061, 16); myalignmalloc(1061, 32); return 0; } // 程序输出 // size: 1031 alignsize: 1040 // size: 1031 alignsize: 1056 // size: 1061 alignsize: 1072 // size: 1061 alignsize: 1088
想确认:仅通过将内存大小设置为对齐值的倍数,是否就能实现正确的对齐内存分配?
内容的提问来源于stack exchange,提问作者mrigendra
相关产品推荐
相关产品推荐

