1

struct thread_info特定のイベントをカウントするために変数を追加しました。これはゲスト OS で行われます。
仮想マシンの実行中に、時々ホストからこれらの変数を読み取ります。
期待される値を取得することもありますが、ジャンク値を読み取ることもあります.GCCが変数を最適化し、読み取っているメモリがガベージ状態になっていると思います.
予防できる方法を知りたいです。
カーネルの GCC 最適化をオフにすることは論外です。私の目的は、カウントしたイベントに基づいて仮想マシンを高速化することだからです。
#pragma optimize("",off)
イベントカウントコード(わずか2行)を関数に分割する必要があるため、効率が低下します。そして、私が数えているこの出来事は非常に頻繁に起こります。
使用できる #pragma テクニックはありますか??
私の変数を揮発性にすることは原因を助けますか??

ありがとう

4

1 に答える 1

3

volatile変数を作成すると、GCC が変数を最適化できなくなります。最適化を完全に無効にする必要はありません。

ただし、カーネルがまだ構造体を更新している可能性がある間に構造体から読み込もうとすると、競合状態に対処する必要がある場合があります。ただし、VM コンテキストでそれを行う方法はわかりません。使用しているハイパーバイザーによって提供される、ゲストとホストの通信のための特別なメカニズムがあるかもしれません。たとえば VMware にはVMCIがあります。

于 2013-01-20T08:09:48.007 に答える