操作员“删除”不返回已用内存

时间:2012-12-09 18:02:25

标签: c++ unix memory memory-leaks

  

可能重复:
  Problem usage memory in C

我遇到问题:操作符“delete”不返回已分配的内存。

代码的和平来说明我如何使用“删除”运算符。 Сellyly,在此代码之前调用在程序的其他部分使用运算符“new”创建的所有指针:

std::multimap<std::string, Container*>::iterator it;
for ( it = MAPX.begin() ; it != MAPX.end(); )
{
    Container* ptr_container = it->second;

    // delete every object at the container
    std::multimap<unsigned int, TMB*>::iterator it_tmb;
    for ( it_tmb = ptr_container->map_thumbs.begin() ; it_tmb != ptr_container->map_thumbs.end(); )
    {
        TMB* ptr_currentGlobalThumb = it_tmb->second;

        ptr_container->map_thumbs.erase( it_tmb++ ); // erase from map      
        delete ptr_currentGlobalThumb; // delete at the memmory
    }


    delete ptr_container; // lets delete empty container now
    MAPX.erase( it++ ); // and erase it from map
}

在开始代码安静之前,我在FreeBSD上查看我的topps aux输出,看看该程序使用了241M的内存:

ps: abrahab 21351  3.5  7.3 263108 246932  ??  S     3:19PM   1:50.94 program
top: 21351 abrahab 8  -8    0   257M   241M biord   2   0:47  8.30% program

清洁过程后没有任何改变!由于程序使用241M的RAM,所以程序继续使用内存(未解除分配)。为什么呢?

重启程序后,我看到系统返回的内存(当然):

abrahab 71595  0.0  5.0 185284 170360  ??  I     4:50PM   0:18.62 program 

修改 1)那么如何在程序运行时控制程序的实内存使用量? 2)当它开始在32位FreeBSD上使用~1Gb内存时,似乎程序崩溃(没有.core文件结束) - FreeBSD可能会“结束”使用太多内存的程序吗?

0 个答案:

没有答案