レンダリングCコードをC++で書き直しています。古いCコードは基本的に必要なものをすべて計算し、各フレームでレンダリングします。新しいC++コードは、代わりに必要なものを事前に計算し、それをリンクリストとして格納します。
現在、実際のレンダリング操作は、変換、色の変更、およびGLリストの呼び出しです。
リンクリストで操作を実行するのは非常に簡単ですが、結果のメソッド呼び出しは古いバージョンよりも時間がかかるように見えます(毎回すべてを計算します-もちろん、新しいバージョンが再計算されないことを確認しました)。
変なこと?古いバージョンよりも少ないOpenGL操作を実行します。しかし、それはさらに奇妙になります。操作の種類ごとにカウンターを追加し、メソッドの最後に古き良きprintfを追加すると、高速になりました。gprofと手動測定の両方でこれが確認されています。
また、両方の場合(トレースありとなし)でG ++によって生成されたアセンブリコードを確認するのも面倒でしたが、大きな変更はありません(これは私の最初の疑いでした)-唯一の違いは、カウンターに割り当てられたスタックワードがいくつかあることです、上記のカウンターを増やし、printfの準備をしてからジャンプします。
また、これは-O2と-O3の両方に当てはまります。UbuntuMaverickでgcc4.4.5とgprof2.20.51を使用しています。
私の質問は、何が起こっているのかということだと思います。私は何が間違っているのですか?私の測定値とgprofの両方から何かが外れていますか?