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