インテル® C++ コンパイラー 17.0 デベロッパー・ガイドおよびリファレンス

ポインターチェッカーの機能の要約

ポインターチェッカーは、OS X* システムではサポートされていません。

次の表は、ポインターチェッカーのさまざまな関連項目を要約したものです。

項目 説明
コンパイラー・オプション:

[Q]check-pointers

ポインターチェッカーを有効にして関連ライブラリーを追加します。 このコンパイラー・オプションは、ポインターによる間接アクセスと配列へのアクセスのチェックを有効にします。

指定できるオプションキーワードは [none | write | rw] です。

  • none: ポインターチェッカーを無効にします。(デフォルト)

  • write: ポインターによる書き込みのみ範囲をチェックします。

  • rw: ポインターの読み取りと書き込みで範囲をチェックします。

コンパイラーは、最適化中のアクセスが安全であることを確認した後、ポインターのチェックコードを削除します。

詳細は、「範囲のチェック」を参照してください。

[Q]check-pointers-dangling

ダングリング・ポインターの参照のチェックを有効にします。

指定できるオプションキーワードは [none | heap | stack | all] です。

  • none: ダングリング・ポインターの参照のチェックを無効にします。(デフォルト)

  • heap: ヒープ上のダングリング・ポインターの参照をチェックします。

  • stack: スタック上のダングリング・ポインターの参照をチェックします。

  • all: ヒープおよびスタック上のダングリング・ポインターの参照をチェックします。

このオプションを使用するには、[Q]check-pointers オプションも指定する必要があります。

このオプションは、[Q]check-pointers-mpx と同時に使用できません。

詳細は、「ダングリング・ポインターのチェック」を参照してください。

[Q]check-pointers-undimensioned

次元のない配列の範囲のチェックを有効にします。

このオプションを使用するには、[Q]check-pointers オプションも指定する必要があります。

詳細は、「配列のチェック」を参照してください。

[Q]check-pointers-narrowing

構造体フィールドへのポインターの絞り込みを有効にするかどうかを指定します。 絞り込みを有効にすると、フィールドポインターはそのフィールドのみ指すことができます。

構造体フィールドへのポインターの絞り込みを有効/無効にします。

デフォルトは、構造体フィールドへのポインターの絞り込みを有効にします。 この機能を無効にすると、ポインターチェッカーと ANSI に準拠していないコードの互換性が向上します。 構造体フィールドへのポインターの絞り込みを無効にするには、このオプションの否定形を指定します。

このオプションを使用するには、[Q]check-pointers オプションも指定する必要があります。

check-pointers-mpx、Qcheck-pointers-mpx

インテル® Memory Protection Extensions (インテル® MPX) 対応のプロセッサーにおいて、コンパイラーがポインターによるメモリーアクセスの範囲をチェックするかどうかを指定します。 ポインターによる間接アクセスと配列へのアクセスのチェックを有効にします。

ポインターチェックの種類を指定します。指定できるオプションキーワードは [none | write | rw] です。

  • none: ポインターチェッカーを無効にします。(デフォルト)

  • write: ポインターによる書き込みのみ範囲をチェックします。

  • rw: ポインターの読み取りと書き込みで範囲をチェックします。

アクセスが安全であると判断できる場合は、チェックが省略されることがあります。

このオプションは、[Q]check-pointers-dangling と同時に使用できません。

[Q]check-pointers オプションと [Q]check-pointers-mpx オプションを一緒に指定すると、[Q]check-pointers-mpx オプションが優先されます。

サポートされている Windows® ターゲット・プラットフォームでは、インテル® MPX 組込み関数や __declspec(mpx) 機能を使用してインテル® MPX 命令を利用できます。 詳細は、『Intel Memory Protection Extensions Enabling Guide』 (https://software.intel.com/sites/default/files/managed/9d/f6/Intel_MPX_EnablingGuide.pdf (英語))

組込み関数:
void * __chkp_lower_bound(void **)

ポインターの下限を返します。

「ラッパーの記述」を参照してください。

void * __chkp_upper_bound(void **)

ポインターの上限を返します。

「ラッパーの記述」を参照してください。

void * __chkp_kill_bounds(void *p)

範囲情報を削除して、引数で指定したポインターがすべてのメモリーにアクセスできるようにします。 この関数は、ポインターの範囲を指定できないイネーブルモジュールで使用される非イネーブルモジュールのポインターに使用します。

関数は、非イネーブルモジュールから作成されたポインターが、同じメモリーアドレスにあった別のポインターの範囲を継承しないことを保証します。

戻り値は範囲情報のないポインターです。

詳細は、「イネーブルモジュールと非イネーブルモジュールの使用」を参照してください。

void * __chkp_make_bounds(void *p, size_t size)

以前に割り当てられていた範囲情報を置換して、引数のポインターに割り当てられたメモリーアドレス内に新しい範囲情報を作成します。 新しい範囲は次のようになります。

p = __chkp_make_bounds(q, size)
    // lower_bound(p) = (char *)q
    // upper_bound(p) = lower_bound(p) + size

詳細は、「カスタム・メモリー・アロケーターのチェック」を参照してください。

レポート関数:
void __chkp_report_control(__chkp_report_option_t option, __chkp_callback_t callback)

エラーのレポート方法を指定します。

詳細は、「範囲外エラーの特定とレポート」を参照してください。

列挙子:

__chkp_report_option_t

範囲外エラーのレポート方法を制御します。この列挙子は、chkp.h ヘッダーファイルで宣言されています。

詳細は、「範囲外エラーの特定とレポート」を参照してください。

環境変数:

INTEL_CHKP_REPORT_MODE

ランタイムにポインターチェッカーのレポートモードを変更します。

詳細は、「範囲外エラーの特定とレポート」を参照してください。

ヘッダーファイル:

chkp.h

組込み関数とレポート関数を定義します。ヘッダーファイルは <install-dir>\include ディレクトリーにあります。

関連情報