gccのリリースノートは-Ogで少し曖昧でした:
妥当なレベルのランタイムパフォーマンスを提供しながら、高速コンパイルと優れたデバッグエクスペリエンスのニーズに対応します。開発の全体的な経験は、デフォルトの最適化レベル-O0よりも優れているはずです。
「開発の全体的な経験」にはコンパイル時間が含まれますか?デバッグシンボルが不要で、コンパイル時間を最適化する場合、-O0または-Ogを使用する必要がありますか?
gccのリリースノートは-Ogで少し曖昧でした:
妥当なレベルのランタイムパフォーマンスを提供しながら、高速コンパイルと優れたデバッグエクスペリエンスのニーズに対応します。開発の全体的な経験は、デフォルトの最適化レベル-O0よりも優れているはずです。
「開発の全体的な経験」にはコンパイル時間が含まれますか?デバッグシンボルが不要で、コンパイル時間を最適化する場合、-O0または-Ogを使用する必要がありますか?
デバッグ シンボルを必要とせず、コンパイル時に最適化している場合、-O0 または -Og を使用する必要がありますか?
デバッグ シンボルの有無が問題にならない場合は、両方のオプションの時間を計って、どちらが速いかを確認します。
「開発の全体的な経験」には、コンパイル時間は含まれますか?
そうだと思いますが、この非常に特殊なケースではそうではありません。
デバッグ シンボルを必要とせず、コンパイル時に最適化している場合、-O0 または -Og を使用する必要がありますか?
-O0
.
コンパイラで-Og
は、(デバッグ用に) 余分なデータを作成して書き出す必要があるため、時間がかかります。アセンブラにコンパイルして(gcc -S -Og
などを使用)、比較するだけです。-O0
しかし、と実行時間の間にどんな違いがあっても、開始時間とその完全な機構-Og
によっておそらく小さくなります。gcc
コンパイル時間が必要な場合は、おそらくtcc
C を検討する必要があります。おそらく、C++ ではLLVMの方が高速です。