人家对内存块的管理是用vector,动态的插入与删除,来做内存的分配与回收,基于人家的代码,做的一些改动,用Map进行管理,用标志来区分该内存块是否已分配,回收时,内存里面的内容也得重置掉,以免影响下一次的调用。
代码如下
std
在内存池中分配固定大小的内存块
该类的目的是加速内存分配速度,并且减少因重复分配相同
内存时产生的内存碎片,比如在服务器应用程序中。
isHasUse
iIndx
pBlock
stdsize_t blockSize preAlloc
ptr
stdsize_t
CMemPool
CMemPool CMemPool
BLOCK_RESERVE
stdvector BlockVec
stdsize_t m_blockSize
m_maxAlloc
m_allocated
BlockVec m_blocks
map sBlock BlockMap
BlockMap m_blocks_map
stdsize_t
m_blockSize
iTotalUseNum
it m_blocks_map it m_blocks_map it
itsecondisHasUse
iTotalUseNum
iTotalUseNum
iAvailableNum
it m_blocks_map it m_blocks_map it
itsecondisHasUse
iAvailableNum
iAvailableNum
m_blocks_map
stdsize_t blockSize preAlloc
blockSize
preAlloc
m_blocks_map
i i preAlloc i
sBlock nBlock
nBlockisHasUse
nBlockiIndx i
nBlockpBlock m_blockSize
m_blocks_mapi nBlock
BlockMapiterator it m_blocks_map it m_blocks_map it
cout itsecondiIndx endl
itsecondpBlock
m_blocks_map
it m_blocks_map it m_blocks_map it
itsecondisHasUse
itsecondisHasUse
cout itsecondiIndx endl
itsecondpBlock
iter m_blocks_map
iter
maxIndx itersecondiIndx
curIndx maxIndx
sBlock nBlock
nBlockiIndx curIndx
nBlockisHasUse
nBlockpBlock m_blockSize
m_blocks_mapcurIndx nBlock
m_blocks_mapcurIndxisHasUse
cout m_blocks_mapcurIndxiIndx endl
m_blocks_mapcurIndxpBlock
ptr
it m_blocks_map it m_blocks_map it
pTmp ptr
itsecondpBlock pTmp
cout itsecondiIndx endl
itsecondisHasUse
pTmp m_blockSize
测试代码
m_id
m_num
m_id
m_num
m_str
CMemPool DATA_BLOCK_LEN
cout myPool1 endl
cout myPool1 endl
cout myPool1 endl
cout myPool1 endl endl
pTest
pTest myPool1
pTestm_id
pTestm_num
cout pTestm_id pTestm_num endl
pTest2
pTest2 myPool1
pTest2m_id
pTest2m_num
cout pTest2m_id pTest2m_num endl endl
cout myPool1 endl
cout myPool1 endl endl
myPool1pTest
pTest
cout myPool1 endl
cout myPool1 endl endl
pTtmp
pTtmp myPool1
pTtmpm_id
cTmp
pTtmpm_str cTmp cTmp
cout pTtmpm_str endl
cout myPool1 endl
cout myPool1 endl endl
myPool1pTtmp
i i i
pTest3
pTest3 myPool1
pTest3m_id
pTest3m_num
cout pTest3m_id pTest3m_num endl endl
cout myPool1 endl
cout myPool1 endl
cout myPool1 endl endl
iWait
cin iWait
还没有评论,来说两句吧...