この記事は、インテル® デベロッパー・ゾーンに公開されている「Find Windows* Memory Errors with Intel® Inspector XE」(https://software.intel.com/en-us/articles/find-windows-memory-errors-with-intel-inspector-xe) の日本語参考訳です。
インテル® Inspector XE は、Windows* 向けアプリケーションのどのようなメモリーエラーを検出できるか?
Windows* のメモリーエラー
メモリーエラー解析タイプの構成設定の説明
次の表は、各解析タイプの構成設定における目的、有用性、コスト (低、中、高、もしくは時間およびリソースの比率) を示しています。(設定はアルファベット順にリストされています)
設定 | 目的、有用性、コスト |
---|---|
Analyze stack accesses – スタックのアクセスを解析 | Detect invalid memory accesses (不正メモリーアクセスを検出) が選択された時にのみ適用されます。
無効なもしくは初期化されていないスレッドのスタックへのアクセスを解析するために選択します。 以下の場合に役立ちます:
高コストです。 推奨事項:
|
Defer memory deallocation – メモリー割り当て解除の延期 (以前は、Byte limit before reallocation と呼ばれていました) | Detect invalid memory accesses (不正メモリーアクセスを検出) と Enable enhanced dangling pointer check (拡張ダングリング・ポインター・チェックを有効にする) が選択されている時にのみ適用されます。
インテル® Inspector XE が解放されたメモリーブロックをすぐに利用可能なメモリー・プールに戻すのを防止します。 これは、アプリケーションが解放したメモリーを再度利用しようとするのを見つけるのに役立ちます。 アプリケーションが多くの割り当て/解放を行う場合、コストが高くなります。 推奨事項: コストがそれほど高くない場合、解析の精度を高めるために使用します。 |
Detect invalid memory accesses – 不正メモリーアクセスを検出 (不正/初期化されていないアクセスの検出を区別する) | 論理もしくは物理的に不正な読み込みや書き込み命令のメモリー参照の問題を検出するために使用します。
アプリケーションが有効なメモリーアクセスを行っていることを確認できます。 コストは中です。 推奨事項: 選択することを推奨します。 注
|
Detect leaks at application exit – アプリケーションの終了時にリークを検出 (以前は、Detect memory leaks upon application exit と呼ばれていました) |
アプリケーションの実行が終了した時に、メモリーブロックは割り当てられているが解放されることのない問題を検出する際に使用します。 以下の場合に役立ちます:
特に Remove duplicates (複製を排除) のみと一緒に使用される場合、極めて低いコストです。 推奨事項: 選択することを推奨します。 |
Detect resource leaks – リソースのリークを検出 | 次の問題を検出する際に使用します:
Windows* GUI アプリケーションの解析に役立ちます。 低コストです。 推奨事項: アプリケーションを最初に解析する時に選択します。その後定期的に使用してもいいでしょう。 |
Detect still-allocated memory at application exit – アプリケーションの終了時にまだ割り当てられているメモリーを検出 (以前は、Report still-allocated memory at application exit と呼ばれていました) | Detect leaks at application exit (アプリケーションの終了時にリークを検出) が選択された時にのみ適用されます。
アプリケーションの実行を停止した時に、まだアクセス可能なメモリーブロックが割り当てられているが、解放されていない問題を検出する際に使用します。 コストは、アプリケーションが実行を停止した時に、まだ割り当てられているメモリーブロックの数に比例して増加します。 推奨事項: メモリーの伸長を調査する際に使用します。 |
Detect uninitialized memory reads – 初期化されていないメモリーの読み込みを検出 (不正/初期化されていないアクセスの検出を区別する) | Detect invalid memory accesses (不正メモリーアクセスを検出) が選択された時にのみ適用されます。
リード命令が初期化されていないメモリー位置にアクセスする問題を検出するために使用します。 以下の場合に役立ちます:
高コストです。 推奨事項: 選択しないことを推奨します。 注
|
Enable enhanced dangling pointer check – 拡張ダングリング・ポインター・チェックを有効にする | Detect invalid memory accesses (不正メモリーアクセスを検出) が選択された時にのみ適用されます。
アプリケーションが、論理的に解放されたメモリーにアクセスしようとしているか検出する際に使用します。 アプリケーションが多くのメモリー割り当てと解放を行い、Defer memory deallocation (メモリー割り当て解除の延期) リストの値がアプリケーションの割り当てるメモリー量よりも小さな場合、コストは高いかもしれません。 推奨事項: ダングリング・ポインターの影響により、アプリケーションが予期できない動作となる際に使用します。 注
|
Enable guard zones – ガードゾーンを有効にする | Detect invalid memory accesses (不正メモリーアクセスを検出) が選択された時にのみ適用されます。
インテル® Inspector XE が、割り当てられたメモリーブロックを越えるメモリーアクセスを検出した場合、オフセット情報を示すように Guard zone size と組み合わせて使用します。 以下の場合に役立ちます:
コストは、割り当ての数に比例します。 推奨事項: 以下に該当しない限り選択します:
注
|
Enable memory growth detection – メモリーの伸長検出を有効にする (以前は、Enable interactive memory growth detection と呼ばれていました) | アプリケーション実行中の特定の時間範囲内で、メモリーブロックが割り当てられているが解放されていないことがあるかどうかを検出する機能を有効にする際に選択します。
選択すると、メモリーの利用パターンをモデル化し、トランザクションが完了した後にアプリケーションがすべてのメモリー割り当てを解放したことを確実に知ることができます。 Reset Growth Tracking と組み合わせて、解析中に Measure Growth ボタンを使用します。 低コストです。 |
Enable on-demand leak detection – オンデマンドのリーク検出を有効にする (以前は、Enable on-demand memory leak detection と呼ばれていました) | アプリケーション実行中の特定の時間範囲内で、メモリーブロックが割り当てられているが解放されておらずかつ参照できないか (ブロックを解放するために必要な有効なポインターがない) 、どうかを検出する機能を有効にする際に選択します。
終了しないアプリケーション、もしくはアプリケーションの部分的なメモリーリークをチェックする際に役立ちます。 Reset Leak Tracking と組み合わせて、解析中に Find Leaks ボタンを使用します。 コストは、割り当ての数に比例します。 |
Guard zone size – ガード・ゾーン・サイズ (以前は Guard zone byte size と呼ばれていました) | Detect invalid memory accesses (不正メモリーアクセスを検出) と Enable guard zones (ガードゾーンを有効にする) が選択されている時にのみ適用されます。
インテル® Inspector XE が、メモリー割り当てに関連した Invalid memory access の問題を特定するため、割り当てられたメモリーブロックにガードバイトを追加する Enable guard zones と組み合わせて使用します。 以下の場合に役立ちます:
コストは、割り当ての数に比例します。 推奨事項: 以下に該当しない限り設定します:
注
|
Maximum number of leaks shown in result – リークの最大数を表示 (以前は、Maximum memory leaks と呼ばれていました) | 解析が終了した後、インテル® Inspector XE の結果に表示するリークの最大数を設定するために使用します。
ゼロに設定すると検出されたすべてのメモリーリークが表示されます。 コストは、リークの数に比例します。 推奨事項: すべてのリークをリストする場合以外は、デフォルト値を使用してください。 ヒント |
Remove duplicates – 重複を排除 | Code Locations ペインで検出された問題をすべて表示するには、選択を解除します。
以下の場合は選択を解除します:
推奨事項: 選択することを推奨します。 |
Revert to previous uninitialized memory algorithm – 初期化されない以前のメモリーアルゴリズムに戻す (非推奨です) | Detect uninitialized memory reads (初期化されていないメモリー読み込みを検出) が選択された時にのみ適用されます。
現在の初期化されていないメモリー読み込み検出のアルゴリズムは、誤検出を減らしますが、解析時間とメモリーのオーバーヘッドを増加させます。以前のバージョンのアルゴリズムを使用する際に選択します。 推奨事項: 選択しないことを推奨します。 |
Stack frame depth – スタックフレームの深さ | 検出されたエラーのコールスタック・コンテキストを減らしたり、増やしたりする際に使用します。
高度なオブジェクト指向のアプリケーションを解析する際、高い値にすると便利です。 高い値にするとコストの影響はありません。 推奨事項: 大きな値は、アプリケーションのコールパスをすべて表示する際にのみ使用します。 |
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください