您的位置:首页 > 其它

动态分配内存返回地址对齐的指针

2016-01-21 17:14 197 查看
今天在调用一个引擎接口的时候,发现要求传入的资源地址要按照16位对齐,即地址值要能被16位整除,资源地址是把资源文件加载到内存的首地址,使用malloc按照资源文件的长度分配,malloc返回的地址不一定满足按照16位对齐,从网上找的一个方法:

原文应用地址:/article/9655184.html

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

//

基本思想是如果要获取一个能被N整除的数,只需要在任意大于0的自然数M加上N-1即可,然后从M到M+N-1中找到能被16整除的数字
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: