コードのブロックまたは関数をコンパイラの最適化機能の除外部分としてマークする方法はありますか?
最適化機能がオンの場合にのみ発生するバグがあります。私はそれがどこにあるのかいくつか推測していますが、このマクロは役に立ちます。
コードのブロックまたは関数をコンパイラの最適化機能の除外部分としてマークする方法はありますか?
最適化機能がオンの場合にのみ発生するバグがあります。私はそれがどこにあるのかいくつか推測していますが、このマクロは役に立ちます。
そこにコードが含まれているとしたら、とても心配です#pragma GCC optimize "O0"
。私と一緒に働いている人には、なぜそれが必要なのかについて非常に明確なコメントをすることを絶対に要求し、おそらく最適化で動作しない理由であるコンパイラーのバグをコンパイラー・ベンダーに報告する必要があります。
また、カーネルのメーリング リストなどに何かを送信することを考えた場合でも、アスベストを 3 層または 4 層重ねて着用することをお勧めします。
正しいことは、最適化をオンにしてコードが正しくコンパイルされない理由に関する回避策を見つけることです。これが必要な場合は、コードに問題がある可能性があります。通常、コードを最適化するときに発生しない「コンパイラーが何かを行うと考える方法」に依存していることが原因です。これは不適切なコーディングであり、コンパイラの最適化を無効にして解決するべきではありません。
gcc では、optimize
関数レベルでプラグマを使用して最適化を回避できます。
#pragma GCC optimize "O0"を関数に適用して、その関数の最適化を防ぐことができます。しかし、コードのブロックが最適化されるのを防ぐ方法があるかどうかはわかりません
したがって、プログラム全体の全体的な最適化設定を行うことができ、これにより、関数を使用して指定された最適化でその設定が上書きされますoptimize
。