SPO 600週7反射

1887 ワード

こんにちは私の友人、Spo 600(ソフトウェア可搬性と最適化)ブログの週7への歓迎.このブログではコンパイラの最適化について議論します.

導入
コンパイラの最適化は、コンパイラが元のコードと同じ結果を維持するが、最高のパフォーマンスを達成するために行われる交代です.通常、実行時間を短縮し、コードサイズを減らし、実行速度を向上させることを意味します.言い換えれば、コンパイラの最適化は、コードをできるだけ効率的にすることです.

Performance##
例を見てみましょう.
void foo(int size) {
    for (int i = 0; i < 5; i++) {
        if (size == 10) {
            std::cout << "Size is 10" << std::endl;
        }
        else {
            std::cout << "Keep going" << std::endl;
        }
    }
}

void betterFoo(int size) {
    if (size == 10) {
        for (int i = 0; i < 5; i++) {
            std::cout << "Size is 10" << std::endl;
        }
    }
    else {
        for (int i = 0; i < 5; i++) {
            std::cout << "Keep going" << std::endl;
        }
    }
}



int main() {
    cout << "Foo" << endl;
    foo(10);
    cout << "better foo" << endl;
    betterFoo(10);
    return 0;
}
結果:

このC +プログラムでは、2つの関数を作成しました.最初の関数fooは、“size 10”または“keep - go”メッセージであれば5回印字されます.第2の関数betterfooは同じことをしています.それらの違いは、“サイズ”値が変更されず、ループ内で5回実行されます.BetterFoo関数では、ループを行う前にサイズをチェックするだけです.

反射
今週、私たちは多くの異なるコンパイラ最適化に取り組みました.そして、それらの各々は小さいように見えます、しかし、アルゴリズムがプログラムのために非常に重要であるので、彼らはより速くて時間効率的であるために我々のプログラムを改善することができます.これは、各メソッドと関数の間の実行のシーケンスを制御し、すべての小さな改善は、ビットのより良い最終的なソリューションになります.