私はここで穀物に反対する人であり、最適化、特にアセンブリの最適化、さらに重要なことにはアセンブリでのデバッグについて学ぶことは決して早すぎることはありません。あなたが学生の場合、あなたはそれの最大の利益を得ると信じています(そのため、失うことはほとんどありません(つまり、時間/お金の面で))。
あなたが業界にいて、アセンブリをいじくり回す仕事をしていないなら、そうしないでください。それ以外の場合、学生であるか一般的な時間がある場合は、プログラムを逆アセンブルする方法を学び、コンパイラよりも優れたソリューションを思いつくことができるかどうかを確認します。私ができない場合、誰が気にします!コンパイラーと同様に書く方法を学びましたが、それはリリースコードのバグ(デバッグシンボルなし)に直面し、逆アセンブリを見つめるときに非常に大きなプラスになります。
答え
これは、最適化について学ぶために見つけた最高のリソースの1つです。
http://www.agner.org/optimize/
暴言
主要な開発者による記事を読んだ場合(たとえば、EASTLの作成とコードの詳細な検証の背後にある理由は、GCCがこのifステートメントをインライン化するのがひどいため、このようなコメントにつながります。コンパイラは常に正しいとは限らないと信じている、特にゲーム開発において)、業界に足を踏み入れると、最適化は日常的なものであり、アセンブリ出力の意味を理解することは大きなプラスになります。また、ゲームのプロファイリングが非常に難しく、常に正確であるとは限らないことに(特にstackoverflowで)気付かないようです。
ただし、注意が必要です。何かを最適化するのに時間を費やし、後でそれが時間の無駄であることに気付くことができます。しかし、あなたは何を学びましたか?あなたは同じような状況でその同じ過ちを繰り返さないことを学びました。
SOが今取っていることは、私の意見では、このステートメントに対する宗教的な姿勢は、あなたがプロファイルを作成し、心配しない限り最適化されないことです。コンパイラはあなたよりもよく知っています。それは学習を妨げます。コンパイラーが苦手であるか、単にあなたを助けることができないため、ゲームを最適化してデバッグするためにアセンブリをいじくり回すために非常に良いお金を払っている業界の専門家を知っていますできません(GPU関連のクラッシュ、関連するデータがデバッガーで読み取ることができないクラッシュなど)!
それをするのが好きで、まだそれを完全に理解していない人がここで質問をし、コンパイラーがあなたよりもよく知っている多くの答えによって断られたり/消されたりしたらどうでしょうか!そして、決してそれらの高給プログラマーの一人にならないのですか?
最後の考え。これを早期に開始すると、コンパイラーが最適化できるのでコンパイラーが最適化するので、最悪の場合はパフォーマンスが改善されず、最悪の場合でもパフォーマンスの改善がないコードをすぐに書き始めることがわかります。 。どちらの場合でも、それは習慣になっており、以前のようにこの方法でコードを書くことは遅くありません。いくつかの例があります(もっとたくさんあります):
- ポストインクリメントが本当に必要な場合を除き、事前インクリメント
- ループ内のコンテナーでsize()を呼び出すのではなく、一定のローカルサイズ変数を使用してコンテナーのループを記述します。
編集:業界でさらに8年後に更新します。アセンブリを学びます。オプティマイザーがどのように機能し、それらが生成するアセンブリを学習します(CompilerExplorerはそのための優れたツールです)。テストビルド(内部テスト用に最適化されたビルド)で、デバッグシンボルがあってもデバッガーに依存できない無数のクラッシュに遭遇しました。コンパイラは最適化を行いすぎており、アセンブリはクラッシュダンプからバグを見つけるための貴重な情報の唯一のソースです。幸運で最初にビルドキューに入った場合、各ビルドには30〜40分かかります。したがって、バグを切り分けるために従来の手法に頼ることはできません。マルチプレイヤーは事態を悪化させます。アセンブリと最適化されたアセンブリの読み方を知ることは、単にあなたをより良くし、最終的にチームにとってより価値のあるものにします。