2012-04-06 10 views
2

人は "shift 1 bit left"を書くのではなく、 "multiple by 2"と書いています。読みやすく、コンパイルが最適化を行うのに十分スマートです。コンパイラの最適化の限界は何ですか?どのように賢いですか?

一般的に何がコンパイルされ、開発者は(コードの可読性のために)行うべきではありませんか?私はいつも数字の操作がはるかに速いと言って、5〜6年前に読んだので、string == ""の代わりにstring.length == 0と書く。これは本当ですか?

それとも、ほとんどのコンパイラは、以下の十分にスマートに変換することになります。

int result = 0; for (int i = 0; i <= 100; i++) { result += i; }

へ:int result = 5050;

あなたの好きな「最適化」は何ですか?ほとんどのコンパイルではできないものは何ですか?

+1

誰でもコンパイラが実行できる最適化を列挙することはできません。 (たくさんあります)もっと具体的な例がありますか? – Mysticial

+1

どのコンパイラ? – SLaks

+0

申し訳ありませんが、私の質問は、特定のコンパイラや特定のアルゴリズムではないと思います。私は一般的な質問をしたい、あなたのような偉大な開発者からいくつかのクールなコードを学びたいと思っています。 – user1032613

答えて

5

アルゴリズム:これまで惑星上のコンパイラは、あなたのためにより良いアルゴリズムを選択することができます。あまりにも多くの人がベンチマークの後、急いで書き換えCの部分にジャンプします。最初に使用しているアルゴリズムを置き換えることを本当に考えていたはずです。

+1

ああ、あなたは驚かれるでしょう...コンパイラは実際には***(いくつかのケースで)あなたがやっていることを認識し、より良いアルゴリズムを選択することができます... – Mysticial

+0

そして、反対側を議論するために、コンパイラも驚くほどばかげて、人間のプログラマにとって些細な事を逃してしまいます... – Mysticial

+0

@ミスチョイ君は、あなたがやっていることを認識したときに、より良いアルゴリズムを選ぶコンパイラの例を挙げることができますか?私は何も知らない。 – chuckj

関連する問題