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

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的地址,,放在返回指针的前面一个地址

版权声明:本文为博主原创文章,未经博主允许不得转载。

人只要不失去方向,就不会失去自己

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

相关文章:

你感兴趣的文章:

标签云: