#pragma execution_frequency

C に適用 C++ に適用

説明

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

構文


構文図

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

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

  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)" 判別内で、プログラム実行が Block A または Block B のいずれに分岐するのかに影響します。2 番目のプラグマは、コンパイラーによって無視されます。

関連参照

汎用プラグマ IBM Copyright 2003