-1

私には 2 つのクラスがfooありbar、一方が他方のスーパークラスであり、両方にメソッドがありhello_worldます。

class foo {
    virtual void hello_world();
};
class bar : public foo {
    void hello_world();
};

bar私の質問は次のとおりです。の仮想化すると、パフォーマンスに違いはありますhello_worldか? これは次のようになります。

class foo {
    virtual void hello_world();
};
class bar : public foo {
    virtual void hello_world();
};

主に から電話hello_worldbarます。ランタイムルックアップを行うため、仮想関数によって関数が遅くなることはわかっています。しかし、この場合、違いはありますか?

4

1 に答える 1

3

クラスが実際にポリモーフィックである可能性があるコンテキストで仮想関数を呼び出すと、インライン化できる同じロジックを持つ関数と比較して、常にパフォーマンスにある程度の影響があります。主な理由は、関数の呼び出しにわずかなオーバーヘッドがあり、どの関数を呼び出す必要があるかを調べる際にわずかなオーバーヘッドがあり、最適化の機会が大幅に失われることです。最後のポイントは通常、最も高価なものです。

元の例はコンパイルされませんでした。つまり、まだパフォーマンス分析が行われていないことは明らかです。コードの実行が遅すぎること、および特定の呼び出しが実際にパフォーマンスの問題が発生する領域にあることを測定したら、パフォーマンスへの影響について心配してください。

于 2012-11-14T23:11:01.473 に答える