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