cocos2d-x节点(b2BlockAllocator.h)API

时间:2023-02-07 19:49:39

本文来自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