首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Box2d源码学习<2>内存管理之SOA的实现

2012-12-16 
Box2d源码学习二内存管理之SOA的实现本系列博客是由扭曲45原创,欢迎转载,转载时注明出处,http://blog.cs

Box2d源码学习<二>内存管理之SOA的实现

本系列博客是由扭曲45原创,欢迎转载,转载时注明出处,http://blog.csdn.net/cg0206/article/details/8258166

SOA,全称small object allocator,中文意思是小对象分配器。box2d虽然是用c++写的,但是并没有使用c++自带的new/delete实现内存管理,而是使用在c的malloc/free做法的基础上封装了类b2BlockAllocator进行内存管理,使得分配和使内存变得更加高效、快速。其中b2BlockAllocator就是一个SOA,下面我们就对源码进行分析。


一、b2BlockAllocator类的头文件

首先我们对头文件b2BlockAllocator.h进行大致的了解一遍。不多说,上代码:

void b2BlockAllocator::Clear(){//释放当前已使用的块空间大小for (int32 i = 0; i < m_chunkCount; ++i){b2Free(m_chunks[i].blocks);}m_chunkCount = 0;//清空块memset(m_chunks, 0, m_chunkSpace * sizeof(b2Chunk));//清空未被使用的内存块链表类型数组memset(m_freeLists, 0, sizeof(m_freeLists));}

只是释放了形成链表的块内存,m_chunks和m_freeLists也只是清空其内容,真正释放它们是在上面说的类的析构函数中。

ok,不多说了,有什么错误、不妥之处,希望大家能多多指正。也希望和大家多多交流。




热点排行