この記事は、インテル® ソフトウェア・サイトに掲載されている「Pointer Checker feature in Intel® Parallel Studio XE 2013: How is it different from Static Analysis, Intel® Inspector XE, Mudflap etc?」の日本語参考訳です。
ポインターチェッカーは、インテル® Parallel Studio XE 2013 の重要な “新機能” です。以下の表は、スタティック解析、Mudflap、インテル® Inspector XE との主な相違点をまとめたものです。
機能 |
相違点 |
インテル® Parallel Studio XE 2013 のポインターチェッカー |
- 解析タイプ: ダイナミック・ランタイム解析および保護。
- バッファー・オーバーフローとオーバーランを検出 – 配列とダングリング・ポインター (スタック & ヒープ) を含む、ポインターを使用するすべてのメモリーアクセスの境界チェックを行います。
- コンパイラー・オプションで有効になり、リンクフェーズで自動的にリンクされるランタイム・ライブラリーに実装されます。構造体のレイアウトや ABI に変更はありません。
- 対応するラッパー RTL 関数ライブラリーを使用して、すべての標準 RTL 関数のチェックを行います。
- 境界操作用の “組込み関数” を提供します。これは、ランタイム・ライブラリー関数 (RTL) のラッパーを記述する際に役立ちます。
例: カスタム・メモリー・アロケーター
- 境界違反をデバッグするためのブレークポイントを含む、範囲外エラーの発見とレポートを制御するユーザー API を提供します。
- ポインターチェッカーは、1 つまたは複数のファイル、あるいはアプリケーション全体で有効にできます。また、ポインターチェッカーが有効なコードとそうでないコードは共存できます。
- リアルタイム・チェックのため、誤検出は少なめです。
|
インテル® Parallel Studio XE 2013 のスタティック解析 |
- 解析タイプ: ソースコードのスタティック解析。
- ポインターチェッカーと比べると、ビルド処理が複雑です。
- バッファー・オーバーフロー、ポインターの誤った使用、メモリーリーク、その他のプログラムエラーを検出します。注: スタティック解析のため、ポインターが指す内容はランタイムと異なることがあります。
- ダイナミック解析と違い、指定されたワークロードで使用される実行パスだけでなく、可能なすべての実行パスを検証します。
- 結果の表示、ナビゲーション、問題の修正には、インテル® Inspector XE 2013 が必要です。
- 誤検出が多くなる可能性があります。また、多くの場合、結果は決定的ではありません。
|
インテル® Inspector XE 2013 |
- 解析タイプ: ダイナミック・ランタイム解析
- ダイナミック・ランタイム・バイナリー・インストルメンテーションを使用します。
- 問題の表示とナビゲーション用の GUI インターフェイスを提供します。
- バッファー・オーバーフロー、メモリーリーク、ダングリング・ポインターを検出します。
- ポインター境界操作用の “組込み関数” は提供しません。
- ポインターの範囲外エラーの発見とレポートを詳細に調整するユーザー API は提供しません。
- リアルタイム・チェックのため、誤検出は少なめです。
- ソースコードに移動して、原因を特定できます。
|
Mudflap |
- 解析タイプ: ダイナミック・ランタイム解析および保護。
- バッファー・オーバーフロー、オーバーラン、ダングリング・ポインターを検出します。
- コンパイラー・オプションで有効になり、ランタイム・ライブラリーで実装されます。ランタイム・ライブラリーは、リンクフェーズで自動的にリンクされないため、ユーザーが指定する必要があります。
- アプリケーションによっては、ライブラリーと Mudflap インストルメンテーションで互換性問題が発生することがあります。
- ダイナミック共有オブジェクト (DSO) には対応していません。
- ポインター境界操作用の “組込み関数” は提供しません。
- 違反メッセージは慣れるまで解読が困難です。
- リアルタイム・チェックのため、誤検出は少なめです。
|
コンパイラーの最適化に関する詳細は、最適化に関する注意事項を参照してください。