fomit-frame-pointer、Oy

EBP を最適化で汎用レジスターとして使用するかどうかを指定します。

アーキテクチャーの制限

/Oy[-] オプションは IA-32 アーキテクチャーでのみ利用できます。IA-32 アーキテクチャーは C++ でのみサポートされています。

構文

Linux*:

-fomit-frame-pointer

-fno-omit-frame-pointer

macOS*:

-fomit-frame-pointer

-fno-omit-frame-pointer

Windows*:

/Oy (C++ のみ)

/Oy- (C++ のみ)

引数

なし

デフォルト

-fomit-frame-pointer
C++: または /Oy

EBP を最適化で汎用レジスターとして使用します。Linux* および macOS* システムでは、-O0 または -g オプションが指定されている場合、デフォルトは -fno-omit-frame-pointer です。

C++: Windows* システムでは、/Od オプションが指定されている場合、デフォルトは /Oy- です。

説明

これらのオプションは、EBP を最適化で汎用レジスターとして使用するかどうかを指定します。-fomit-frame-pointer オプションおよび /Oy オプションは、使用を許可します。-fno-omit-frame-pointer オプションおよび /Oy- オプションは、使用を許可しません。

一部のデバッガーは、EBP をスタック・フレーム・ポインターとして使用するため、必要な操作をしない限りスタック・バックトレースを生成できません。-fno-omit-frame-pointer オプションおよび /Oy- オプションは、EBP レジスターをすべての関数のスタック・フレーム・ポインターとして使用するコードを生成するようにコンパイラーに指示します。これにより、デバッガーは、次の操作を行うことなく、スタック・バックトレースを生成できます。

-O0 オプションまたは -g オプションを指定すると、-fno-omit-frame-pointer オプションが設定されます。-O1-O2、または -O3 オプションを指定すると、-fomit-frame-pointer オプションが設定されます。

これは C++ 固有のコンテンツです。DPC++ には適用されません。
/Oy オプションは、/O1/O2、または /O3 オプションを指定すると設定されます。/Oy- オプションは、/Od オプションを指定すると設定されます。

-fno-omit-frame-pointer または /Oy- オプションを使用すると、利用可能な汎用レジスターが 1 つ減るため、生成するコードの効率が少し低下する場合があります。

Linux*:

現在、gcc 3.2 の例外処理には問題があることが分かっています。このため、C++ 用に gcc 3.2 がインストールされていて、例外処理が有効な場合 (デフォルト)、コンパイラーはこのオプションを無視します。

IDE オプション

Visual Studio*: [Optimization] > [Omit Frame Pointers]

Eclipse*: [Optimization] > [Provide Frame Pointer]

Xcode*: [Optimization] > [Provide Frame Pointer]

代替オプション

Linux* および macOS*: -fp (これは古いオプション (非推奨) です)

Windows*: なし

関連情報