#pragma execution_frequency

説明

#pragma execution_frequency ディレクティブを使用すると、実行頻度が非常に 高いか非常に低いと予期されるプログラム・ソース・コードにマークを付けることができます。

構文

構文図を読む構文図をスキップする>>-#--pragma--execution_frequency--(--+-very_low--+--)---------><
                                      '-very_high-'
 

このプラグマは、実行頻度が非常に高いか非常に低いと予期されるプログラム・ソース・コードにマークを 付けるために使用します。 プラグマは、ブロック・スコープ内に配置する必要があり、 次の分岐ポイントで実行されます。

このプラグマは、最適化プログラムに対するヒントとして使用します。 最適化を選択していない場合、このプラグマは有効ではありません。

  1. このプラグマは、実行頻度の低いコードにマークを付けるために if 文のブロックで使用します。
    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();
    }
  2. このプラグマは、実行頻度の高いコードにマークを付けるために switch 文のブロックで使用されます。
    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.   */
    
  3. このプラグマは、ファイル・スコープでは使用できません。 プラグマは、 ブロック・スコープ内の任意の場所に配置することができ、 最も近い分岐に影響します。
    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 番目のプラグマは、 コンパイラーによって無視されます。