インテル® C++ コンパイラー 18.0 デベロッパー・ガイドおよびリファレンス
ポインターチェッカーは、macOS* システムではサポートされていません。
次の表は、ポインターチェッカーのさまざまな関連項目を要約したものです。
項目 | 説明 |
---|---|
コンパイラー・オプション: | |
[Q]check-pointers |
ポインターチェッカーを有効にして関連ライブラリーを追加します。このコンパイラー・オプションは、ポインターによる間接アクセスと配列へのアクセスのチェックを有効にします。 指定できるオプションキーワードは [ none | write | rw ] です。
コンパイラーは、最適化中のアクセスが安全であることを確認した後、ポインターのチェックコードを削除します。 詳細は、「範囲のチェック」を参照してください。 |
[Q]check-pointers-dangling |
ダングリング・ポインターの参照のチェックを有効にします。 指定できるオプションキーワードは [ 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 ] です。
アクセスが安全であると判断できる場合は、チェックが省略されることがあります。 このオプションは、[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 ディレクトリーにあります。 |