0

重複の可能性:
C の問題使用メモリ

問題があります: operator "delete" は割り当てられたメモリを返しません。

「削除」演算子の使用方法を説明するためのコードの平和。確かに、このコードがプログラムの他の部分で演算子「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 

EDIT: 1)プログラムの実行時に実際のメモリ使用量 を制御するにはどうすればよいですか?2) 32 ビット FreeBSD で最大 1Gb のメモリを使用し始めると、プログラムがクラッシュする (.core ファイルなしで終了する) ようです。

4

0 に答える 0