青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

Cpper
C/C++高級工程師 Android高級軟件工程師 IT集成工程師 音頻工程師 熟悉c,c++,java,c#,py,js,asp等多種語言 程序猿
以前在codeproject上看到過一篇關(guān)于內(nèi)存池的文章(http://www.codeproject.com/KB/cpp/MemoryPool.aspx)
下載下來試了試,感覺有點(diǎn)問題
想給引擎加入內(nèi)存池,考慮到當(dāng)前業(yè)余時(shí)間在看Loki
就索性使用其SmallObject了
對于內(nèi)存池當(dāng)然要求之一那就是速度
其次對我來說我比較關(guān)系以下的這類問題
一句話概括就是
Base* ptr = new SubClass;
索性我就根據(jù)Loki庫和Boost的Object_Pool
設(shè)計(jì)了如下的引擎內(nèi)存池(當(dāng)然問題還很多以后慢慢修改)
#ifdef LOKI_EXT_LIB
#include 
<GEngine/Loki/Loki.hpp>
#else
    
#error 需要包含Loki庫
#endif 

namespace core
{

////////////////////////////////////////////////////////////
/// 定義蓋莫引擎2.1.2內(nèi)存池對象 
////////////////////////////////////////////////////////////    
struct MemoryPool    
{
public:
       
    
////////////////////////////////////////////////////////
    
/// 獲取,釋放指定大小的內(nèi)存 
    
////////////////////////////////////////////////////////        
    template<class T>
    
static T* Malloc(size_t size)
    {   
        
return (T*)MEMORY_POOL.Allocate(size,false);
    }   
    
    template
<class T>
    
static void  Free(T* ptr,size_t size)
    {
        MEMORY_POOL.Deallocate(ptr,size);      
    }
    
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造無參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////       
    template<class T>
    
static T* Construct()
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T();
        
return (T*)ptr;        
    }
    
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造帶有1個(gè)參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////      
    template<class T,class P1>
    
static T* Construct(const P1 &p1)
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T(p1);
        
return (T*)ptr;        
    }
 
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造帶有2個(gè)參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////      
    template<class T,class P1,class P2>
    
static T* Construct(const P1 &p1,const P2 &p2)
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T(p1,p2);
        
return (T*)ptr;        
    }
    
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造帶有3個(gè)參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////    
    template<class T,class P1,class P2,class P3>
    
static T* Construct(const P1 &p1,const P2 &p2,const P3 &p3)
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T(p1,p2,p3);
        
return (T*)ptr;        
    }
    
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造帶有4個(gè)參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////      
    template<class T,class P1,class P2,class P3,class P4>
    
static T* Construct(const P1 &p1,const P2 &p2,const P3 &p3,const P4 &p4)
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T(p1,p2,p3,p4);
        
return (T*)ptr;        
    }    
    
    
////////////////////////////////////////////////////////
    
/// 構(gòu)造帶有5個(gè)參數(shù)的對象類型并返回指針 
    
////////////////////////////////////////////////////////      
    template<class T,class P1,class P2,class P3,class P4,class P5>
    
static T* Construct(const P1 &p1,const P2 &p2,const P3 &p3,const P4 &p4,const P5 &p5)
    {   
        
void* ptr = MEMORY_POOL.Allocate(OBJECT_SIZE(T),false);  
        
if(ptr == NULL)
            
return NULL; 
        
new(ptr)T(p1,p2,p3,p4,p5);
        
return (T*)ptr;        
    }                
   
    
////////////////////////////////////////////////////////
    
/// 給定對象的析構(gòu)(size為對象大小) 
    
////////////////////////////////////////////////////////      
    template<class T>
    
static void Destruct(T* ptr, size_t size)
    {   
        
if(ptr == NULL || size <= 0)
            
return;
        ptr
->~T();    
        MEMORY_POOL.Deallocate(ptr,size);    
    }
    
    
////////////////////////////////////////////////////////
    
/// 獲取可分配的最大對象大小 
    
//////////////////////////////////////////////////////// 
    static int GetMaxObjSize()
    {    
        
return MEMORY_POOL.GetMaxObjectSize();
    }
    
    
////////////////////////////////////////////////////////
    
/// 獲取字節(jié)對齊字節(jié)數(shù) 
    
////////////////////////////////////////////////////////  
    static int GetAlignment()
    {   
        
return MEMORY_POOL.GetAlignment();
    }    
}; 
靜態(tài)的Malloc和Free是分配和釋放原生態(tài)的內(nèi)存
而Construct,Destruct則是構(gòu)造和析構(gòu)對象形式的內(nèi)存
這里提供了6個(gè)版本的Construct函數(shù)
分別對應(yīng)0-5個(gè)構(gòu)造函數(shù)參數(shù)

記得以前遇到的一個(gè)問題
那就是假如有一個(gè)對象 她沒有默認(rèn)構(gòu)造函數(shù)(只有帶參數(shù)構(gòu)造函數(shù))
如果現(xiàn)在需要分配N個(gè)她該如何操作?
那就是placement new 了

posted on 2010-04-20 15:56 ccsdu2009 閱讀(763) 評論(0)  編輯 收藏 引用 所屬分類: Game引擎
 
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美日本久久| 亚洲第一精品夜夜躁人人爽| 久久精品视频99| 六十路精品视频| 亚洲色诱最新| 欧美成人一区二区三区片免费| 一区二区三区.www| 亚洲精品乱码久久久久久蜜桃91 | 欧美午夜精品久久久久免费视| 一区二区免费在线播放| 久久久久国产精品麻豆ai换脸| 亚洲美女一区| 一本色道久久加勒比精品| 亚洲电影观看| 日韩一级黄色大片| 一区二区三区国产精华| 夜夜精品视频一区二区| 亚洲综合精品| 亚洲欧美在线看| 久久激情婷婷| 亚洲国产成人在线| 亚洲第一主播视频| 日韩视频不卡中文| 亚洲一二三区精品| 亚洲网在线观看| 亚洲人成高清| 日韩亚洲欧美一区| 亚洲另类自拍| 久久视频国产精品免费视频在线| 欧美亚洲在线播放| 最近中文字幕日韩精品| 亚洲一区在线免费观看| 亚洲视频观看| 久久婷婷久久一区二区三区| 欧美无乱码久久久免费午夜一区| 国产亚洲一区二区三区在线观看| 亚洲精品日韩精品| 老司机免费视频久久| 亚洲日本一区二区三区| 欧美一级片在线播放| 欧美成人在线免费观看| 国产一区二区三区在线观看精品 | 亚洲私人黄色宅男| 久久综合久久久久88| 亚洲伦伦在线| 亚洲视频一区| 国产精品日韩欧美综合| 国模叶桐国产精品一区| 久久精品中文字幕免费mv| 久久精品日产第一区二区| 国产毛片一区二区| 欧美伊人久久久久久久久影院| 亚洲国产专区| 国产精品免费观看在线| 在线一区二区日韩| 亚洲高清视频在线观看| 久久久亚洲国产美女国产盗摄| 久久伊伊香蕉| 99国产精品自拍| 欧美午夜一区二区三区免费大片| 99精品99久久久久久宅男| 久久久久国产精品www | 99精品国产在热久久下载| 亚洲午夜小视频| 国产精品高潮呻吟| 亚洲一区二区三区欧美| 亚洲人在线视频| 欧美韩日一区| 91久久国产综合久久蜜月精品| 久久久久国产精品麻豆ai换脸| 亚洲欧美日韩视频一区| 国产精品视频最多的网站| 欧美一区二区三区视频| 亚洲男人的天堂在线aⅴ视频| 国产欧美亚洲精品| 欧美ed2k| 亚洲一区二区三区午夜| 国产伦理一区| 欧美高清成人| 亚洲在线免费观看| 久久综合电影| 夜夜嗨网站十八久久| 国产精品亚洲网站| 卡通动漫国产精品| 99精品视频免费观看视频| 国产精品午夜在线观看| 亚洲第一精品电影| 国产九区一区在线| 国产欧美日本| 有坂深雪在线一区| 韩国美女久久| 久久午夜羞羞影院免费观看| 永久域名在线精品| 久久精品人人做人人爽电影蜜月| 久久亚洲春色中文字幕久久久| 久久久久久久国产| 99re这里只有精品6| 国产精品一区二区三区四区五区| 欧美激情在线| 亚洲免费在线看| 欧美日本亚洲韩国国产| 亚洲黄页一区| 今天的高清视频免费播放成人| 亚洲免费视频中文字幕| 亚洲欧美在线高清| 狠狠色丁香久久婷婷综合丁香| 久久久久在线观看| 久久久蜜桃精品| 亚洲精品视频免费观看| 欧美性一区二区| 久久久91精品国产一区二区精品| 另类成人小视频在线| 一本色道婷婷久久欧美| 国产一区二区三区久久精品| 欧美国产日韩一区二区| 亚洲欧洲日韩综合二区| 久久久久久综合| 中文亚洲欧美| 麻豆久久精品| 欧美与欧洲交xxxx免费观看 | 欧美高清一区| 欧美电影资源| 一本大道久久精品懂色aⅴ| 久久久99免费视频| 在线亚洲自拍| 久久精品国产免费看久久精品| 99国产精品99久久久久久| 久久国产夜色精品鲁鲁99| 亚洲欧美一区二区精品久久久| 午夜国产一区| 欧美在线免费看| 久久国产精品99精品国产| 午夜精品国产精品大乳美女| 日韩亚洲成人av在线| 亚洲一区二区三区在线观看视频| 国产在线播精品第三| 免费高清在线一区| 欧美亚洲系列| 久久另类ts人妖一区二区| 亚洲黄一区二区三区| 亚洲电影欧美电影有声小说| 亚洲福利视频二区| 亚洲一区视频在线观看视频| 久久九九热免费视频| 亚洲国语精品自产拍在线观看| 亚洲男女自偷自拍| 欧美第一黄色网| 亚洲人永久免费| 欧美一区二区三区四区在线观看地址| 久久综合五月天婷婷伊人| 欧美日韩一区二区在线播放| 国产日韩欧美高清| 99re66热这里只有精品3直播 | 一区二区三区成人精品| 欧美在线视频免费播放| 久久av免费一区| 欧美国产日本| 亚洲人成人一区二区在线观看 | 免费观看日韩av| 国产一区二区高清| 午夜精品久久久久久久99黑人 | 欧美成人dvd在线视频| 午夜精品福利电影| 欧美xx视频| 欧美日韩国产影院| 99成人免费视频| 国产主播一区二区| 国产视频久久久久| 国产精品美女久久久久aⅴ国产馆| 欧美顶级艳妇交换群宴| 国内激情久久| 一道本一区二区| 亚洲人成在线观看一区二区 | 亚洲午夜在线观看视频在线| 欧美亚洲日本一区| 在线观看三级视频欧美| 久久久久看片| 欧美成人免费播放| 欧美亚洲第一页| 午夜精品久久久久久久99樱桃| 欧美成人精品1314www| 欧美日韩在线精品一区二区三区| 亚洲最新在线| 亚洲伊人久久综合| 亚洲精品久久久一区二区三区| 亚洲精品综合在线| 国产主播喷水一区二区| 亚洲视频播放| 欧美亚洲免费电影| 国产精品区免费视频| 亚洲精选91| 一本大道久久精品懂色aⅴ| 激情久久影院| 校园春色综合网| 免费久久久一本精品久久区| 欧美日韩国产免费观看| 欧美激情在线| 亚洲精品日韩综合观看成人91| 久久久久久伊人| 国产精品萝li|