1

次の 2 つの疑似コード ブロックは、コンパイルされた言語とインタープリターされた言語の両方の速度に関してどのように比較されますか? (桁数無視)

基本的に、事前に計算するのではなく、いくつかの定数の関数として変数を記述することによってパフォーマンスが低下することはありますか? これにより、多くの場合、コードがより明確になります。

permanentNum = (3.1416 / 3) + 1.5708
return permanentNumber / userInputNumber

.

permanentNum = 2.6179
return permanentNumber / userInputNumber

ありがとう!

4

3 に答える 3

3

Mitch Wheat のコメントは完全に正しいです。最適化は、明確で正しいコードを作成した後で、必要な場合にのみ実行するものです。

ただし、質問に答えるには、明らかに言語に依存します。C に似た言語用の適切なコンパイラには、定数折りたたみ最適化パスがあります。GCC、Oracle の javac、または広く使用されているコンパイラでは、2 つの例で同じコードが生成されます。

解釈された言語は十分に遅い可能性が高いため、解析時に定数の折りたたみを行うかどうかに関係なく、いくつかの追加の算術演算のコストがボトルネックにはなりません。:-)

于 2012-11-05T01:24:30.517 に答える
3

コードを明確にすることから始めます。

次に、パフォーマンスを測定します。パフォーマンスの問題がある場合は、ボトルネックを特定します。

ボトルネックが定数の割り当て (コンパイルまたは解釈されたコード) にある可能性はほとんどありません。

于 2012-11-05T01:20:32.617 に答える
1

コンパイラは通常、そのような定数を最適化(3.1416 / 3) + 1.5708します。そのため、オブジェクト コードで終了する値を記述しても、 2.6179. インタープリターも同じことを行う可能性がありますが、実行時に行うため、はい、パフォーマンスは低下します。

ただし、違いはおそらく無視できるほどのものなので、Mitch Wheat が言ったように、コードの明瞭さを優先する必要があります。理論的な分析は 1 つのことですが、(特定の環境で) 特定のコードの実際のボトルネックが何であるかを確認する唯一の方法は、テスト、プロファイリング、測定です。

于 2012-11-05T01:25:38.687 に答える