次の方法で共有


メモリ統計情報の表示

このトピックの内容は、次の製品に該当します。

エディション

Visual Basic

C#

F#

C++

Web Developer

Express

トピック該当なし トピック該当なし トピック該当なし

ネイティブのみ

トピック該当なし

Pro、Premium、Ultimate

トピック該当なし トピック該当なし トピック該当なし

ネイティブのみ

トピック該当なし

CMemoryState::Difference 関数は、2 つのメモリ状態オブジェクトを参照し、1 つ目の状態から 2 つ目の状態までの間にヒープから解放されなかったオブジェクトを検出します。 「方法 : メモリのスナップショットを取得する」の手順を実行し、CMemoryState::Difference を使用してそれらのメモリを比較した後で、CMemoryState::DumpStatistics を呼び出すと、解放されなかったオブジェクトに関する情報を取得できます。

次に例を示します。

if( diffMemState.Difference( oldMemState, newMemState ) )
{
   TRACE( "Memory leaked!\n" );
   diffMemState.DumpStatistics();
}

このコード例では、次の情報がダンプされます。

0 bytes in 0 Free Blocks
22 bytes in 1 Object Blocks
45 bytes in 4 Non-Object Blocks
Largest number used: 67 bytes
Total allocations: 67 bytes

Free Blocks というのは、afxMemDF が delayFreeMemDF に設定されている場合、解放が遅れているブロックのことです。 詳細については、「方法 : メモリ診断を有効にする」を参照してください。

2 行目に示されている Object Blocks は、ヒープ上に割り当てられたままになっているブロックです。

Non-Object Blocks には、new によって割り当てられた配列と構造体が含まれます。 この例では、ヒープ上に割り当てられた後で解放されていない Non-Object Blocks が 4 つあります。

Largest number used は、プログラムが占有したメモリの最大値を示します。

Total allocations は、プログラムで使用されたメモリの総量を示します。

参照

処理手順

方法 : メモリのスナップショットを取得する

参照

CMemoryState 構造体

その他の技術情報

MFC におけるメモリ リークの検出

診断サービス