ページをダーティにする(ページテーブルエントリのダーティビットをオンにする)ために、次のようにページの最初のバイトに触れます。
pageptr[0] = pageptr[0];
しかし実際には、gccはデッドストアの削除によってステートメントを無視します。gccによる最適化を防ぐために、ステートメントを次のように書き直します。
volatile int tmp;
tmp = pageptr[0];
pageptr[0] = tmp;
トリックはうまくいくようですが、やや醜いです。同じ効果を持つディレクティブまたは構文はありますか?また、-O0
フラグを使用したくないので、パフォーマンスが大幅に低下します。
8
@Mark -O0は最適化を停止しますが、プログラムのパフォーマンスを低下させます。私はこのコードスニペットの最適化を防止したいだけです:P
—
ZelluX
過去に追加したいのですが、使用
—
スムースウェア
-O0
してもデッドコードの「最適化」を防ぐことはできませんでした。たとえば、GCCがコードに効果がないことを検出した場合、それを削除するだけです。私の知る限り、これは前の段階-O0
です...しかし、それは私の経験にすぎません