找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: freeeyes

内存池设计研究与应用

  [复制链接]
发表于 2011-2-11 14:28:52 | 显示全部楼层
谢谢楼主这么有责任心。来恢复信息。
发表于 2011-4-17 20:15:57 | 显示全部楼层
谢谢楼主
发表于 2011-5-1 20:33:55 | 显示全部楼层
研究一下,感谢楼主。
发表于 2012-1-28 17:22:41 | 显示全部楼层
不错,研究下
发表于 2012-9-24 17:34:14 | 显示全部楼层
所有内存都被管理了啊,这个事情有点慌的
发表于 2012-10-12 14:59:05 | 显示全部楼层
我添加了一个静态接口释放
static void release()
        {
                if(m_pMemoryPools)
                {
                        m_pMemoryPools->~CMemoryPools();
                        free(m_pMemoryPools);
                        m_pMemoryPools = NULL;
                }
        }

还有内存有泄漏,对Close()修改了一下
void CMemoryPools::Close()
{
        /** @brief 添加线程安全 */
        CAutoLock autolock(&m_ThreadLock);

        /** @brief 删除所有已经分配的文件块 */
        _MemoryList* pCurrMemoryList = m_pMemoryList;
        while(NULL != pCurrMemoryList)
        {
                _MemoryBlock* pMemoryUsed     = pCurrMemoryList->m_pMemoryUsed;
                while(NULL != pMemoryUsed)
                {
                        if(NULL != pMemoryUsed->m_pBrick)
                        {
                                free(pMemoryUsed->m_pBrick);
                                pMemoryUsed->m_pBrick = NULL;
                        }
                        _MemoryBlock* toDel = pMemoryUsed;
                        pMemoryUsed     = pMemoryUsed->m_pNext;
                        free(toDel);
                }

                _MemoryBlock* pMemoryFree     = pCurrMemoryList->m_pMemoryFree;
                while(NULL != pMemoryFree)
                {
                        if(NULL != pMemoryFree->m_pBrick)
                        {
                                free(pMemoryFree->m_pBrick);
                                pMemoryFree->m_pBrick = NULL;
                        }

                        _MemoryBlock* toDel = pMemoryFree;
                        pMemoryFree     = pMemoryFree->m_pNext;
                        free(toDel);
                }
                m_pMemoryList = pCurrMemoryList;
                pCurrMemoryList = pCurrMemoryList->m_pMemLNext;
                free(m_pMemoryList);
        }
}
发表于 2013-4-25 14:58:45 | 显示全部楼层
新手不熟定制new、delete的规则

请问楼主,为何重载了operator new, operator delete, operator delete[]
却没有重载operator new[]?
发表于 2014-8-29 23:23:54 | 显示全部楼层
楼主 我爱死你了,我上次看见一个qq群来着,又给忘了,求加入啊
发表于 2014-8-31 00:53:47 | 显示全部楼层
"其实内存池的作用大家也知道,一般是解决大量的new和delete频繁操作引起的内存碎片,效率是一方面,另外长时间后的安全性也是一个问题。"

现在的操作系统,内存碎片都会自己清理,重点已经不是碎片    而是性能
new很耗性能   delete更好性能    从前视列表中拆大内存为小内存 耗性能   回收时查找  相邻空闲内存  并且合并  更耗内存   因为这个需要安全操作  类似加锁
还有就是现在很多杀毒软件会钩new这个函数  使得new性能下降非常多

内存池的性能提升是非常可观的

您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-22 02:20 , Processed in 0.015099 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表