本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(b2BlockAllocator.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
// b2BlockAllocator进行内存管理,使得分配和使内存变得更加高效、快速。内存管理之SOA的实现
///cocos2d-x-3.0alpha0/external/Box2D/Common
// b2BlockAllocator进行内存管理,使得分配和使内存变得更加高效、快速。内存管理之SOA的实现
#ifndef B2_BLOCK_ALLOCATOR_H
#define B2_BLOCK_ALLOCATOR_H
#include <Box2D/Common/b2Settings.h>
const int32 b2_chunkSize = 16 * 1024; //一次分配内存大小
const int32 b2_maxBlockSize = 640; //块子节点大小的最大值
const int32 b2_blockSizes = 14; //可以申请块子节点大小的类型总数
const int32 b2_chunkArrayIncrement = 128; //块空间增量
struct b2Block; //块子节点结构体[链表实现]声明
struct b2Chunk; //块结构体声明
/// //这是一个小型的对象分配器,用于一次分配多个小对象
/// See: http://www.codeproject.com/useritems/Small_Block_Allocator.asp
class b2BlockAllocator
{
public:
b2BlockAllocator();
~b2BlockAllocator();
//分配内存,当size>b2_maxBlockSize则直接用b2Alloc分配
void* Allocate(int32 size);
//释放内存,当size>b2_maxBlockSize则直接用b2Free释放
void Free(void* p, int32 size);
//清空内存
void Clear();
private:
b2Chunk* m_chunks; //当前块的头指针
int32 m_chunkCount; //当前已使用的块空间节点总数
int32 m_chunkSpace; //当前已申请的块空间节点总数
b2Block* m_freeLists[b2_blockSizes]; //未被使用的内存块链表类型数组,保存了其不同类型链表的头指针
static int32 s_blockSizes[b2_blockSizes]; //申请的块大小类型数组
static uint8 s_blockSizeLookup[b2_maxBlockSize + 1]; //根据要申请块的大小获取其类型索引的数组
static bool s_blockSizeLookupInitialized; //是否已初始化s_blockSizeLookup数组,标志变量
};
#endif