基本的にはそうです。しかし、最適化の機会を逃したという特にばかげた例を見つけた場合は、それを開発者に報告する必要があります。
ただし、Braindeadソースコードは常にBraindeadマシンコードを生成します。多くの一般的なイディオムが認識されて「修正」されますが、ある程度、コンパイラはあなたが意図したことではなく、あなたが言うことを実行する必要があります(ルールはデバッガーを使用せずに変更されたことを知ることは不可能です)。
そして、少なくとも一部のアーキテクチャでは、新旧を問わず、役立つトリックがまだあります。
たとえば、0から100までカウントし、配列に対して何かを行うループがある場合、一部のコンパイラはカウンターを逆にして100からゼロに下げる場合があります(ゼロとの比較は別の定数との比較よりも安価であるため)。ループに副作用がある場合、彼らはそれを行うことができません。副作用が逆の順序で発生することを気にしない場合は、自分でカウンターを逆にすると、より良いコードを取得できます。
GCCが持つもう1つの便利なトリックは、またはである可能性が高い__builtin_expect(expr, bool)
コンパイラーに指示できるため、それに応じてブランチを最適化できるというものです。同様に、何かが起こり得ないことをGCCに伝えることができるので、それが起こった場合を考慮する必要はありません。expr
true
false
__builtin_unreachable()
ただし、一般的に、コンパイラーは十分に優れているため、プログラムが実行時間の90%をその1つの小さな関数に費やさない限り、実際に気にする必要はありません。(たとえば、memcpy
通常はアセンブラで記述されます)。