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

麒麟子

~~

導(dǎo)航

<2025年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

統(tǒng)計(jì)

常用鏈接

留言簿(12)

隨筆分類

隨筆檔案

Friends

WebSites

積分與排名

最新隨筆

最新評(píng)論

閱讀排行榜

評(píng)論排行榜

某內(nèi)存池中的指針用法

內(nèi)存池實(shí)現(xiàn)有許多種,各有不同的優(yōu)缺點(diǎn)。

這里不是主要說內(nèi)存池,只是覺得這個(gè)內(nèi)存池中的指針用得很飄逸!

 

 1template <class T,int AllocSize = 50>   
 2class MemPool   
 3{   
 4public:   
 5    static void* operator new(size_t allocLength)   
 6    {   
 7        if(!mStartPotinter)   
 8        {   
 9            MyAlloc();   
10        }
   
11        //將當(dāng)前指向空閑內(nèi)存起始地址作為反回地址   
12        unsigned char* p = mStartPotinter;   
13        //取出空閑區(qū)域前4字節(jié)的值,賦值給空閑地址   
14        //因?yàn)榍八淖止?jié)中存放了下一個(gè)BLOCK的地址   
15        mStartPotinter = *(unsigned char**)mStartPotinter;   
16        return p;   
17    }
   
18  
19    static void operator delete(void* deleteP)   
20    {   
21//      assert(deletePointer);   
22        *(unsigned char**)deleteP = mStartPotinter;   
23        mStartPotinter = (unsigned char*)deleteP;   
24    }
   
25  
26    static void MyAlloc()   
27    {   
28        //預(yù)分配內(nèi)存   
29        mStartPotinter = new unsigned char[sizeof(T)*AllocSize];   
30        //構(gòu)造BLOCK之間的關(guān)系    
31        //每個(gè)BLOCK的前4BYTE存放了下一個(gè)BLOCK的地址   
32        unsigned char** next = (unsigned char**)mStartPotinter;   
33        unsigned char* p = mStartPotinter;   
34  
35        for(int i = 0; i< AllocSize;++i)   
36        {   
37            p +=sizeof(T);//步進(jìn)   
38            *next = p;//賦值   
39            next = (unsigned char**)p;//步進(jìn)   
40        }
   
41        *next = NULL;   
42    }
   
43  
44    static unsigned char* mStartPotinter;   
45}
;   
46  
47template <class T,int AllocSize>   
48unsigned char* MemPool<T,AllocSize>::mStartPotinter = NULL;  
49
50
51本文來自CSDN博客,轉(zhuǎn)載請(qǐng)標(biāo)明出處:http://blog.csdn.net/wqjqepr/archive/2010/05/03/5552322.aspx

 

 

簡(jiǎn)單提示一下: unsigned char** next = (unsigned char**)mStartPotinter;

mStartPotinter作為二維指針的時(shí)候,相當(dāng)于是一系列的unsigned char* [].

對(duì)于第一個(gè) *next 相當(dāng)于(unsigned char*)mStartPointer[0].

第二個(gè)相當(dāng)于(unsigned char*)mStartPointer[sizeof(T)*1];

第三個(gè)相當(dāng)于(unsigned char*)mStartPointer[sizeof(T)*2];

所以,構(gòu)造BLOCK之間關(guān)系的時(shí)候,也可以寫成

 

1for(int i = 0; i< AllocSize;++i)   
2{   
3 p +=sizeof(T);//步進(jìn)   
4 unsigned char* pp = (unsigned char*)(p[sizeof(T)*i]);   
5 pp = p;//賦值   
6}
 

 

 

不想多解釋了,累。估計(jì)多看幾分種啥都明白了!

 

 

posted on 2010-05-03 18:33 麒麟子 閱讀(1976) 評(píng)論(11)  編輯 收藏 引用 所屬分類: Programming

評(píng)論

# re: 某內(nèi)存池中的指針用法 2010-05-04 09:02 jmchxy

這個(gè)使用非常的正常, 基本上內(nèi)存池都是這樣的結(jié)構(gòu)。或者為了可讀性使用一個(gè) 類似下面的union 。

union BLOCK
{
BLOCK* next;
unsigned char data[BLOCKSIZE];
};

指針的強(qiáng)制類型轉(zhuǎn)換和0字節(jié)的數(shù)組在Win32 API中廣泛使用著  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 09:32 小時(shí)候可靚了

嗯,是的! 謝謝講解!  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 09:33 小時(shí)候可靚了

@jmchxy
這樣行么?
union BLOCK
{
unsigned char* next;
unsigned char data[BLOCKSIZE];
};  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 10:55 zuhd

@小時(shí)候可靚了
我個(gè)人覺得
union BLOCK
{
DWORD next;
unsigned char data[BLOCKSIZE];
};
這樣寫都行,只要能把這個(gè)指針的地址保存到 data的前4個(gè)字節(jié),后面自己做強(qiáng)制轉(zhuǎn)換就好了,不過BLOCK* next這樣的格式是科學(xué)的,用void* 或DWORD來聲明指針,然后用*(T*)這樣的格式去取,就太不和諧了
  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 11:33 麗可酷

謝謝講解  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 12:53 小時(shí)候可靚了

@zuhd
嗯,謝謝,我早上腦殘了。哈哈  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 17:44 Kevin Lynx

就是把一整塊內(nèi)存分成多塊,利用未使用位置串聯(lián)下這些塊。很多代碼都會(huì)涉及到這種用法。  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 18:58 小時(shí)候可靚了

@Kevin Lynx
嗯,就是這樣的!!!  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-04 18:58 小時(shí)候可靚了

不知道還有其它方式么!!  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-05 09:32 lymons

很棒,學(xué)習(xí)了。

不過,這對(duì)單個(gè)block的分配是個(gè)很好的解決方案,
但是要是分配多個(gè)block呢?
在重載delete操作符的函數(shù)中,是沒有辦法知道要本次要?jiǎng)h除的內(nèi)存
到底有多少個(gè)塊,也就沒有辦法維護(hù)這些block中的地址表。當(dāng)然,
除非把block數(shù)作為參數(shù)傳進(jìn)去,但這樣的話,就造成了用戶
的麻煩,用戶在刪除分配給自己的內(nèi)存的時(shí)候還必須記得這塊內(nèi)存里
的block的數(shù)目,萬一寫錯(cuò)了,后果不堪設(shè)想。  回復(fù)  更多評(píng)論   

# re: 某內(nèi)存池中的指針用法 2010-05-05 13:39 wjn

我覺得這種方法有一個(gè)限制:sizeof(T) >= sizeof(指針)
用union那種就沒事了,僅僅是這樣做空間上劃不來而已  回復(fù)  更多評(píng)論   

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美午夜性色大片在线观看| 日韩视频在线一区| 亚洲第一区色| 悠悠资源网亚洲青| 亚洲国产精品热久久| 在线观看国产日韩| 在线日本高清免费不卡| 1769国产精品| a4yy欧美一区二区三区| 在线午夜精品| 欧美一激情一区二区三区| 久久激情久久| 欧美sm视频| 亚洲精品一区二区三区在线观看 | 欧美在线观看一二区| 欧美一二区视频| 国产精品日韩高清| 国产伦理一区| 国产综合色一区二区三区| 激情一区二区| 一区二区三区黄色| 久久精品九九| 亚洲日本乱码在线观看| 中文av一区二区| 久久久久久网站| 欧美日本一区二区三区| 国产日本欧美视频| 亚洲精品在线看| 欧美一区二区三区播放老司机| 久久综合久久综合久久综合| 亚洲精选视频免费看| 久久电影一区| 欧美精品免费观看二区| 国产日韩精品一区观看| 亚洲乱码国产乱码精品精可以看| 欧美亚洲免费| 99pao成人国产永久免费视频| 欧美一区二区| 国产精品第十页| 亚洲片区在线| 久久久久久尹人网香蕉| 夜夜嗨av色综合久久久综合网| 久久久九九九九| 国产精品腿扒开做爽爽爽挤奶网站 | 欧美高清在线播放| 午夜精品久久久| 欧美日韩精品一区二区| 亚洲激情女人| 麻豆国产精品777777在线| 亚洲制服欧美中文字幕中文字幕| 欧美高清不卡| 亚洲国产日韩在线一区模特| 久久精品免费| 欧美一级视频精品观看| 国产精品久久久久一区二区三区共 | 久久精品女人| 国产伦精品一区二区三区在线观看| 亚洲精品激情| 亚洲高清免费在线| 美女黄毛**国产精品啪啪| 国产综合色产| 老司机精品导航| 久久久久久免费| 在线成人av| 欧美成人免费网站| 欧美.com| avtt综合网| 一本大道av伊人久久综合| 欧美日韩国产综合网| av成人毛片| 在线一区二区日韩| 国产精品美女午夜av| 国产欧美视频一区二区三区| 亚洲在线免费| 亚洲欧美中文日韩在线| 国产日韩亚洲| 欧美成人午夜视频| 欧美激情亚洲视频| 亚洲视频免费在线| 亚洲欧美激情诱惑| 国内视频精品| 欧美黄色日本| 国产精品久久91| 久久久99久久精品女同性| 久久亚洲国产精品一区二区| 亚洲精品国产视频| 亚洲婷婷综合久久一本伊一区| 国产精品一区二区三区四区 | 午夜老司机精品| 欧美在线观看一区二区| 亚洲第一久久影院| 一区二区三区高清| 国产视频一区在线| 欧美成人69| 欧美日韩亚洲天堂| 久久人人97超碰国产公开结果| 老司机免费视频久久| 在线午夜精品自拍| 久久精品99| 一本久道久久综合婷婷鲸鱼| 亚洲午夜久久久| 亚洲激情偷拍| 亚洲综合色噜噜狠狠| 亚洲日本中文字幕免费在线不卡| 99伊人成综合| 伊人成年综合电影网| 一区二区欧美在线观看| 在线日本成人| 午夜精品久久久久久久99樱桃| 亚洲精品国久久99热| 欧美亚洲一区二区三区| 日韩一级裸体免费视频| 欧美影院精品一区| 在线视频一区二区| 老巨人导航500精品| 亚洲免费在线精品一区| 久久影音先锋| 久久九九热re6这里有精品| 欧美日韩国产二区| 欧美成人午夜影院| 国产综合视频在线观看| 亚洲制服少妇| 亚洲欧美资源在线| 欧美亚洲第一区| 亚洲日韩视频| 亚洲国产综合在线| 久久久中精品2020中文| 久久不射网站| 国产精品拍天天在线| 亚洲视频免费在线观看| 亚洲私人影院| 欧美日韩国产精品 | 欧美在线视频不卡| 韩曰欧美视频免费观看| 亚洲一卡久久| 亚洲欧美久久久久一区二区三区| 欧美交受高潮1| 欧美激情精品久久久久久蜜臀 | 欧美一级久久| 久久精品国产一区二区三| 国产精品女主播在线观看| 亚洲精品资源| 一区二区免费在线播放| 欧美精品久久一区二区| 亚洲国产精品激情在线观看 | 亚洲免费观看高清完整版在线观看熊 | 亚洲激情第一页| 蜜臀久久99精品久久久久久9| 免费看亚洲片| 亚洲精品国产精品乱码不99| 欧美粗暴jizz性欧美20| 亚洲精品1区2区| 亚洲午夜影视影院在线观看| 欧美系列亚洲系列| 亚洲专区国产精品| 久久久91精品国产| 亚洲电影欧美电影有声小说| 免费观看成人网| 一本色道久久88综合亚洲精品ⅰ| 亚洲特黄一级片| 国产日韩精品在线| 欧美91福利在线观看| 一二美女精品欧洲| 久久精品毛片| 亚洲麻豆av| 国产精品成人午夜| 久久国产精彩视频| 亚洲日本在线观看| 欧美在线网址| 亚洲三级性片| 国产日韩欧美三级| 欧美激情1区| 香蕉视频成人在线观看| 欧美暴力喷水在线| 亚洲一区精彩视频| 亚洲盗摄视频| 欧美三级网页| 久久久亚洲影院你懂的| 在线视频精品一| 狼狼综合久久久久综合网| 99这里有精品| 狠狠色丁香婷婷综合| 欧美人与性动交cc0o| 午夜精品久久久| 亚洲人成网站色ww在线| 久久久亚洲欧洲日产国码αv| 99国产精品自拍| 激情懂色av一区av二区av| 欧美视频在线播放| 欧美承认网站| 久久久亚洲成人| 亚洲综合色自拍一区| 亚洲乱码日产精品bd| 久久综合九色综合欧美就去吻| 亚洲一区国产| 亚洲手机视频| 亚洲免费电影在线观看| 亚洲韩国日本中文字幕| 欧美在线观看www| 一区二区三区高清在线|