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;
}
- ››管理/var/spool/clientmqueue/下的大文件
- ››管理私有云,第 2 部分: 使用 WebSphere CloudBur...
- ››内存屏障与JVM并发
- ››管理 Eclipse 环境:Eclipse 维护的神秘艺术
- ››管理私有云:WebSphere CloudBurst Appliance 命令...
- ››管理启动项 - Windows 7中的BCDEDIT命令
- ››管理Exchange 2003注意事项
- ››管理好超级管理员帐户堵住系统漏洞
- ››管理数据中心资源池需要注意的事项
- ››管理虚拟化环境的两大重要标准:VMAN和OVF
- ››内存调试技巧
- ››管理与技术有机结合 保障网络安全运行
更多精彩
赞助商链接