GCC が C のいくつかのステートメントを最適化するのを防ぐにはどうすればよいですか? 質問する

GCC が C のいくつかのステートメントを最適化するのを防ぐにはどうすればよいですか? 質問する

ページをダーティにするには (ページ テーブル エントリのダーティ ビットをオンにする)、次のようにページの最初のバイトを操作します。

pageptr[0] = pageptr[0];

しかし実際には、GCC はデッド ストアの除去によってこのステートメントを無視します。GCC による最適化を防ぐために、このステートメントを次のように書き直します。

volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;

このトリックは機能しているようですが、少し見苦しいです。同じ効果を持つディレクティブや構文があるかどうか知りたいです。-O0フラグはパフォーマンスに大きなペナルティをもたらすため、使用しないでください。

ベストアンサー1

使用できます

#pragma GCC push_options
#pragma GCC optimize ("O0")

your code

#pragma GCC pop_options

GCC 4.4 以降の最適化を無効にします。

詳細が必要な場合は、GCC のドキュメントを参照してください。

おすすめ記事