はきだめC/C++下級者の質問箱 2
at TECH
593:デフォルトの名無しさん
07/11/16 19:20:28
>>589
なぜ「switch-case文より関数ポインタテーブルのが高速」だと考えるのか?
↓
条件分岐が排除できるから
↓
では、なぜ条件分岐が排除できると高速になるのか?
↓
実際に実行するコードがかなり前から分かっていれば、
CPUでコードプリフェッチやアウトオブオーダー実行などの最適化を行えるから
↓
関数ポインタテーブルを使えば実行するコードがかなり前に分かるのか?
↓
条件にもよるが、おそらくはノー
多くの場合、直前にならないと関数ポインタの値が分からない
つまり、関数ポインタテーブルを使っても、少なくともx86の場合は速くなりません。
条件分岐なら二者択一でとりあえずどちらかの分岐コードを実行するという手もありますが、
関数ポインタだとそういうこともできないので、多くの場合ストールします。
実際に実行するコードアドレスがかなり前から分かっていて、
そのアドレスを特定のレジスタ(か不変なことが保証されているメモリ)
に保存しておくことができればストールは回避できます。
次ページ続きを表示1を表示最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4772日前に更新/249 KB
担当:undef