本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(b2StackAllocator.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
B2StackAllocator主要是为了运行一个步长时满足box2d需要的临时内存空间,作为栈分配器来防止单步堆分配。
///cocos2d-x-3.0alpha0/external/Box2D/Common
// B2StackAllocator主要是为了运行一个步长时满足box2d需要的临时内存空间,作为栈分配器来防止单步堆分配。
#ifndef B2_STACK_ALLOCATOR_H
#define B2_STACK_ALLOCATOR_H
#include <Box2D/Common/b2Settings.h>
//栈中内存池的大小
const int32 b2_stackSize = 100 * 1024; // 100k
const int32 b2_maxStackEntries = 32; //栈元素的最大数量
//栈实体定义
struct b2StackEntry
{
char* data; //头指针
int32 size; //大小
bool usedMalloc; //是否使用
};
// 这是一个栈分配器用于每一步都快速的分配
// 你必须成对使用allocate/free这对函数。
// 如果你使用allocate/free次数不同时,将会出现断言。
class b2StackAllocator
{
public:
b2StackAllocator(); //构造函数
~b2StackAllocator(); //析构函数
void* Allocate(int32 size); //申请内存函数 ,参数说明:size :需要申请的内存大小 ,返 回 值:申请的内存头指针
void Free(void* p); //释放内存函数 参数说明:p :释放内存的头指针
int32 GetMaxAllocation() const; //获取已申请的内存容量的最大值 返 回 值:曾经进栈过所有元素【不管现在是否出栈】使用的内存容量
private:
char m_data[b2_stackSize]; //栈的内存池,用于栈子节点的内存开辟
int32 m_index; //在栈的内存池中,已使用的内存大小
int32 m_allocation; //栈中的所有元素使用内存大小
int32 m_maxAllocation; //曾经进栈过所有元素【不管现在是否出栈】使用的内存容量 注意该变量在对象销毁之前只增不减
b2StackEntry m_entries[b2_maxStackEntries]; //栈实体的数组
int32 m_entryCount; //栈中元素的数量
};
#endif