Chinaunix

标题: C内存分配问题 [打印本页]

作者: 黑人也疯狂    时间: 2012-04-09 10:09
标题: C内存分配问题
我在看Box2D源码的时候碰到的,请大家忙我指点下
void* MyAlloc(int size)                                    //1
{
        size += 4;                                               //2
        char* bytes = (char*)malloc(size);          //3
        *(int*)bytes = size;                                 //4
        return bytes + 4;                                     //5
}

我有几处不明。
第三行是分配size大小的内存给bytes,然后第4行我就不太看明白了,我先说说我的理解。
它先把bytes转换成int*指针,然后赋值给这个指针所指向的值为size,最后返回bytes+4的地址。
这个方法的真正意思我不是很领悟。首先是size+=4,然后又把bytes赋值成size,是不是把一块内存和size联合起来了?
请高手指点了...merci!



作者: hellioncu    时间: 2012-04-09 10:13
就是在申请内存的时候偷偷的在前面记录了申请的长度。

作者: 黑人也疯狂    时间: 2012-04-09 10:37
回复 2# hellioncu
你这么一说跟我先前那个预判差不多,也是把大小和内存地址结合起来。
那我再进一步问一个问题,这样做一般来说有什么用?额...


   
作者: hellioncu    时间: 2012-04-09 10:42
黑人也疯狂 发表于 2012-04-09 10:37
回复 2# hellioncu
你这么一说跟我先前那个预判差不多,也是把大小和内存地址结合起来。
那我再进一步问 ...


不懂Box2D。
一般来说加上长度为了在某些场合下能判断是否越界。

另外说一句,只加4可能会导致一些对齐问题,加8更好些。
作者: 黑人也疯狂    时间: 2012-04-09 12:35
回复 4# hellioncu

在理的,因为Box2D有自己的内存分配机制,为防止内存碎片化...谢谢侬,哈哈
   




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2