WEB开发网
开发学院软件开发C++ C++内存管理变革(2):最袖珍的垃圾回收器 阅读

C++内存管理变革(2):最袖珍的垃圾回收器

 2010-10-15 09:07:47 来源:Web开发网   
核心提示:2. 在当前的_MemBlock的自由内存(free memory)不足的情况下,我们就需要申请一个新的_MemBlock以供使用[5],C++内存管理变革(2):最袖珍的垃圾回收器(4),申请新的_MemBlock,我们又会遇到两种情况:a) 申请的字节数(即cb)小于一个_MemBlock所能够提供的内存(即Blo

2. 在当前的_MemBlock的自由内存(free memory)不足的情况下,我们就需要申请一个新的_MemBlock以供使用[5]。申请新的_MemBlock,我们又会遇到两种情况:

a) 申请的字节数(即cb)小于一个_MemBlock所能够提供的内存(即BlockSize)。

这种情况下,我们只需要将该_MemBlock作为新的当前_MemBlock挂到链表中,剩下的工作就和情形1完全类似。示意图如下:

图 4

b) 而在内存申请的字节数(即cb)大于或等于一个Block的字节数时,我们需要申请可使用内存超过正常长度(BlockSize)的_MemBlock。这个新生成的_MemBlock全部内存被用户申请。故此,我们只需要修改_ChainHeader的pPrev指针,改为指向这一块新申请的_MemBlock即可。m_begin、m_end保持不变(当前的_MemBlock还是当前的_MemBlock)。如图:

图 5

★ 下面我们考虑内存释放(Clear)过程。这个过程就是遍历_MemBlock释放所有的_MemBlock的过程,非常简单。代码如下:

void AutoFreeAlloc::Clear()
{
_MemBlock* pHeader = _ChainHeader();
while (pHeader)
{
_MemBlock* pTemp = pHeader->pPrev;
free(pHeader);
pHeader = pTemp;
}
m_begin = m_end = (char*)HeaderSize;
}

上一页  1 2 3 4 5 6  下一页

Tags:内存 管理 变革

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接