アカウント名:
パスワード:
いつも思うんですがエミュって重いですよねLLVMみたいに動的コンパイルすれば超早くなるのでは?と妄想してしまいます
# 難しい(現実的に作るのは不可能に近い)のはわかってます
switchの羅列ばかりで驚いた事があります。(略) 少なくとも関数ポインタの配列位は使ってるんじゃないかと思っていたので。
関数ポインタの配列って可読性はよくなりますが、オーバーヘッドが大きいですよ。それよりもswitchの方が効率が良いです。switch-caseと見ると、内部的にif-elseif-elseif…みたいな処理になって効率が悪い、と思われるのかもしれませんが、賢いコンパイラ(gccとか)で、caseの指定値が連続した数値だった場合、ジャンプテーブルに展開されます。そういう場合のswitch-caseはそんなオーバーヘッドはありません。むしろ、関数ポインタ
10年くらい前には、定型文・式みたいなものはそういうのやってましたよ
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
吾輩はリファレンスである。名前はまだ無い -- perlの中の人
エミュ (スコア:0)
いつも思うんですがエミュって重いですよね
LLVMみたいに動的コンパイルすれば超早くなるのでは?と妄想してしまいます
# 難しい(現実的に作るのは不可能に近い)のはわかってます
Re: (スコア:1)
前どこかでソースコードを見た時に、switchの羅列ばかりで驚いた事があります。当時、なんとなくエミュって得体のしれない超技術で作られているようなイメージが有り、少なくとも関数ポインタの配列位は使ってるんじゃないかと思っていたので。
いつもの結論は、必要ないとか技術不足以外では、移植性の高さと再現性を重視しているんじゃないかってところです。
ゲーム機エミュレーターってのは、閉じたハードにサードパーティーソフトを動かせるようになった時に真っ先に移植されるソフトです。何しろ、初歩的なグラフィック・オーディ
Re: (スコア:3, すばらしい洞察)
関数ポインタの配列って可読性はよくなりますが、オーバーヘッドが大きいですよ。それよりもswitchの方が効率が良いです。
switch-caseと見ると、内部的にif-elseif-elseif…みたいな処理になって効率が悪い、と思われるのかもしれませんが、
賢いコンパイラ(gccとか)で、caseの指定値が連続した数値だった場合、ジャンプテーブルに展開されます。そういう場合のswitch-caseはそんなオーバーヘッドはありません。むしろ、関数ポインタ
Re:エミュ (スコア:1)
いくら最適化が賢くても関数ポインタの配列よりか速くはならないだろうと思ってましたが、関数呼び出しかどうかで差が出るんですか。びっくりしました。
ただそのコードは余り最適化を期待できない環境で、逆に関数ポインタの意味も無さそうな環境で…。まぁ、私はコードを見ただけで別に関わったりは…。とにかく当時はそう思っちゃいました。
ところで昔から思うんですが、高速化する場合Cとアセンブラ両方で書いて、コンパイラが等価性を保証して、速度比較して、さらにそこから学習してくれる、みたいなのはできないんでしょうかね。
Re:エミュ (スコア:2)
10年くらい前には、定型文・式みたいなものはそういうのやってましたよ