#pragma execution_frequency ディレクティブを使用すると、実行頻度が非常に 高いか非常に低いと予期されるプログラム・ソース・コードにマークを付けることができます。
>>-#--pragma--execution_frequency--(--+-very_low--+--)--------->< '-very_high-'
このプラグマは、実行頻度が非常に高いか非常に低いと予期されるプログラム・ソース・コードにマークを 付けるために使用します。 プラグマは、ブロック・スコープ内に配置する必要があり、 次の分岐ポイントで実行されます。
このプラグマは、最適化プログラムに対するヒントとして使用します。 最適化を選択していない場合、このプラグマは有効ではありません。
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) の決定の間にプログラム実行がブロック A に分岐するのか、またはブロック B に分岐するのかに影響します。2 番目のプラグマは、 コンパイラーによって無視されます。