malloc函数字节对齐很经典的问题

来源:互联网 发布:网络视频网站排名 编辑:程序博客网 时间:2024/06/06 01:22

int *mallocedMemory = (int *)malloc(1024+15);

alignedMemory = (int *)(((int)mallocedMemory + 15) & ~15);

((void **)alignedMemory)[-1] = mallocedMemory;
return alignedMemory;

+15 而不是 +16的原因

例:  地址 0x00 + 15 变成 0x0F,通过& ~15,还是变为0x00,这样本身一个16字节对齐的地址就不会浪费16个字节了

        地址 0x00 + 16 变成 0x10,通过& ~15,还是变为0x10,这样本身一个16字节对齐的地址就会浪费16个字节

 

((void **)alignedMemory)[-1] = mallocedMemory目的是存放mallocedMemory的地址,放在返回指针的前面一个地址

原创粉丝点击