可能重复:
C 中的问题使用内存
我有问题:运算符“删除”不返回分配的内存。
和平代码来说明我如何使用“删除”操作符。当然,在此代码调用程序其他部分使用运算符“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 上top
的ps 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)似乎程序崩溃(没有 .core 文件结束)当它开始在 32 位 FreeBSD 上使用约 1Gb 的内存时 - FreeBSD“结束”程序是否有可能使用太多内存?