<< 目次を表示 >> ページ位置: プログラムの動作解析 > プロファイラ > メモリリーク |
メモリプロファイルの機能を利用すると、メモリの割り当て回数と解放回数を表示できます。
利用目的
対象のプログラムでメモリリークの可能性がある場合にこの機能を利用します。メモリリークしているかどうかの判断は、メモリの割り当て(取得)処理が成功している場合で、その際に渡したメモリアドレスに対して会報処理が行われていない場合をメモリリークとしています。
操作
メモリリークの検知はフック処理を利用しています。メモリの割り当ておよび開放処理をフックし、その内容を記録します。また、メモリの割り当て時のコールスタック情報を保存し、コールグラフの作成のための情報として利用します。必要に応じて、この記録処理を停止・再開できます。
この検知について、プログラムの種類やメモリの利用方法により、適切な方針を決める必要があります。小さなプログラムでは最初から最後まで実行し、メモリに関する操作を検知します。大きなプログラムでは、必要な範囲でのみこの機能を有効にする方が良いでしょう。
結果
動作の取得結果は実行中にいつでも確認できます。ただし、レポートの出力ボタンは、取得処理の実行中に押すことはできません。必要に応じた期間、データを収集し、その後停止してレポートの出力を行い、結果を確認します。
結果はレポートビューとして表示されます。レポートは2つのタブがあり、コールグラフと関数の概要が表示されます。コールグラフには、それぞれのコールスタックについてメモリリークの可能性がある回数が表示されます。
データの記録する範囲によっては、この数値は適切な値とは言えないかもしれません。必要に応じて、特定の項目以下の情報を表示できます。
動作条件
最適で正確な結果を得るためには、対象のプログラムはデバッグ版として、最適化せずデバッグ情報を含む形であることが必要です。Frame Pointer Omission (FPO) の最適化を行っている場合、結果が正しくない場合があります。