0

私は現在、Javascript でエミュレーターを実装しています。エミュレートされたプラットフォームのメモリ モデルはかなり複雑です。そのため、次のように関数の配列を介して読み取りと書き込みを行っています。

var MRead = [];
ReadBiosSpace = function(addr) { return (EnableBios ? BIOS[addr] : ROM[addr]); };
for (i = 0; i <= 0xFF; i++) { MRead[i] = ReadBiosSpace; };
function Read(addr) { return MRead[addr](addr); };

明らかに、読み取り関数と書き込み関数は非常に頻繁に呼び出されるため (少なくとも命令ごとに 1 回、主な実行はOperators[Read(ProgramCounter)]())、パフォーマンスに非常に敏感です。

実行できるパフォーマンスの最適化はありますか? これは最良の方法ですか?

4

2 に答える 2

1

他の回答に加えて、これも使用できます。

for (i = 0xFF - 1; i--) { MRead[i] = ReadBiosSpace; };
于 2012-11-02T16:02:10.363 に答える
1

EnableBiosあまり頻繁に変更されない場合、私が確認できる唯一の明白な機能強化は、 の 2 つの異なるバージョンをReadBiosSpace用意し、変更のたびに最初の 256 の場所に適切なバージョンを再割り当てすることです。

これにより、これらの場所のいずれかにアクセスするたびに三項演算子を呼び出す必要がなくなります。

于 2012-11-02T15:42:41.737 に答える