はきだめC/C++下級者の質問箱 2 at TECH
[2ch|▼Menu]
593:デフォルトの名無しさん
07/11/16 19:20:28
>>589
なぜ「switch-case文より関数ポインタテーブルのが高速」だと考えるのか?

条件分岐が排除できるから

では、なぜ条件分岐が排除できると高速になるのか?

実際に実行するコードがかなり前から分かっていれば、
CPUでコードプリフェッチやアウトオブオーダー実行などの最適化を行えるから

関数ポインタテーブルを使えば実行するコードがかなり前に分かるのか?

条件にもよるが、おそらくはノー
多くの場合、直前にならないと関数ポインタの値が分からない

つまり、関数ポインタテーブルを使っても、少なくともx86の場合は速くなりません。
条件分岐なら二者択一でとりあえずどちらかの分岐コードを実行するという手もありますが、
関数ポインタだとそういうこともできないので、多くの場合ストールします。
実際に実行するコードアドレスがかなり前から分かっていて、
そのアドレスを特定のレジスタ(か不変なことが保証されているメモリ)
に保存しておくことができればストールは回避できます。


次ページ
続きを表示
1を表示
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

4772日前に更新/249 KB
担当:undef