1

ifソースコードがコンパイルされるとき、コンパイラは//elseifおよびステートメントを異なる方法elseで処理switchし、switchステートメントを少なくとも対応する//と同じくらい効率的にし、ifほとんどelseiselse場合より効率的にすることを知っています。これは通常、実行時に使用されるコンパイル時にジャンプテーブルを作成することによって行われます。switchただし、インタプリタ言語(コンパイルされていない)の場合、ステートメントを使用すると効率が大幅に向上しますか?確かに、インタプリタは、switchステートメントの効率を上げるためにジャンプテーブルを事前に作成することはできません。

インタープリターは、対応する//ステートメントのセットと比較してステートメントの効率switchを高める方法でステートメントを処理しますか?switchifelseifelse

4

1 に答える 1

1

私の推測では、インタプリタ言語では、switchステートメントを使用することによる効率の利点はコンパイルされた言語よりも実際に小さいと思います。私が考えることができる唯一の実際の利点は、switchステートメントでは、オペランド(さまざまな「ケース」と比較されるもの)が一度だけ評価され、すぐにレジスターに保持され、変更されないことです。異なる'cases'とのみ比較しますが、ifステートメントがそのビットを見逃し、すべてのif句のオペランドを再評価する可能性がある場合(コストが単にメモリから読み取る場合でも)。

さらに、読みやすさについても考慮する必要があります。ほとんどの場合、このパフォーマンスの違いはごくわずかであり、コードをより読みやすく理解しやすいものにするオプションを選択する必要があります。

于 2013-03-31T07:53:19.657 に答える