この質問は純粋に好奇心ではなく、私は答えがコンパイラに依存していると確信しています。これは極端なマイクロ最適化でもあり、ほとんど確実に維持できないコードにつながります。 CPUは明らかに各計算を実行してそれをどこかに格納する必要があります。多分それは機能的に同じです。単一行の文は高速ですか?
これまでのところ、変数の使用量を減らしても本質的に高速の実行コードが得られるのではないかという疑問がありました。例えば、長い計算のためにレジスタに結果を残すことを知っているでしょう。もちろん、同じ結果が複数回必要な場合は、これは役に立ちません。例えば
このコード:このような何かのコンパイラの出力は、なしの変数を持つ単一の行、常に同一である一般に
var final = GetFinal((GetNumber() + 10)/2);
:
var result = GetNumber();
var adjusted1 = result + 10;
var adjusted2 = adjusted1/2;
var final = GetFinal(adjusted2);
は以下に変換することができます言語間で?上記のステートメントが100の計算に関係する場合、それは同じですか?
[アセンブリコードを確認してください](http://stackoverflow.com/a/137074/2721883)の両方が発行されました。 – clcto
それは本当です。しかし、私は一般的なケースではさらに疑問に思っています。 – Telavian
答えはありません。たとえば、純粋な関数と遅延評価関数を持つ言語では、 'GetFinal'の1行引数は使用されないと評価されないかもしれませんが、4行バージョンは評価されます。これはコンパイルを検討する前でも(+が算術プラスを意味しない言語)コンパイルすると、すべてのコンパイラーは、それが準拠していてそのような最適化が強制されない限り、その実装を自由に行えます。一般的に、マクロ最適化を行い、コンパイラにマイクロ最適化をさせ、疑わしいときは読みやすさに焦点を当てます。 –