#pragma execution_frequency ディレクティブを使用すると、実行頻度が非常に高いか非常に低いと予期されるプログラム・ソース・コードにマークを付けることができます。
このプラグマは、実行頻度が非常に高いか非常に低いと予期されるプログラム・ソース・コードにマークを付けるために使用します。プラグマは、ブロック・スコープ内に配置する必要があり、次の分岐ポイントで実行されます。
このプラグマは、最適化プログラムに対するヒントとして使用します。最適化を選択していない場合、このプラグマは有効ではありません。
int *array = (int *) malloc(10000); if (array == NULL) { /* Block A */ #pragma execution_frequency(very_low) error(); }
コード・ブロック "Block B" に実行頻度が低いというマークが付けられていると、分岐の際には "Block C" が選択されることになります。
if (Foo > 0) { #pragma execution_frequency(very_low) /* Block B */ doSomething(); } else { /* Block C */ doAnotherThing(); }
while (counter > 0) { #pragma execution_frequency(very_high) doSomething(); } /* This loop is very likely to be executed. */ switch (a) { case 1: doOneThing(); break; case 2: #pragma execution_frequency(very_high) doTwoThings(); break; default: doNothing(); } /* The second case is frequently chosen. */
int a; #pragma execution_frequency(very_low) int b; int foo(boolean boo) { #pragma execution_frequency(very_low) char c; if (boo) { /* Block A */ doSomething(); { /* Block C */ doSomethingAgain(); #pragma execution_frequency(very_low) doAnotherThing(); } } else { /* Block B */ doNothing(); } return 0; } #pragma execution_frequency(very_low)
1 番目と 4 番目のプラグマは無効ですが、2 番目と 3 番目は有効です。ただし、3 番目のプラグマのみが効果を有し、 "if (boo)" 判別内で、プログラム実行が Block A または Block B のいずれに分岐するのかに影響します。2 番目のプラグマは、コンパイラーによって無視されます。