[解決済み】なぜvolatileキーワードを使用するのですか?重複
質問
重複の可能性があります。
なぜvolatileが存在するのですか?
私は使ったことがないのですが、なぜみんな使うのでしょうね?具体的に何をするものなのでしょうか?フォーラムを検索しても、C#かJavaのトピックしか出てきません。
どのように解決するのですか?
次のコードを考えてみてください。
int some_int = 100;
while(some_int == 100)
{
//your code
}
このプログラムがコンパイルされるとき、コンパイラはこのコードを最適化することがあります。
決して
の値を変更しようとしたことは一度もありません。
some_int
を最適化したくなるかもしれません。
while
ループを
while(some_int == 100)
から
何か
と等価である。
while(true)
を使えば、実行が速くなります。
while
ループは、どうやら
true
常に)です。
(コンパイラが最適化しない場合、値をフェッチする必要があるため
some_int
を100と比較する必要があり、各反復で明らかに少し遅くなります)。
しかし、時には、(プログラムの一部の)最適化が
好ましくない
の値を他の人が変えている可能性があるからです。
some_int
から
コンパイラが認識していないプログラム外部での
しかし、それはあなたが設計した方法なのです。この場合、コンパイラの最適化は、以下のようになります。
ではなく
は望ましい結果をもたらします!
そこで、望ましい結果を得るためには、コンパイラが
while
ループになります。そこで
volatile
キーワードがその役割を果たします。必要なのは、これだけです。
volatile int some_int = 100; //note the 'volatile' qualifier now!
つまり、次のように説明するのです。
volatile
は、コンパイラにこう伝えます。
コンパイラの皆さん、私は揮発性です。 によって変更される可能性があります。 を意識することはない。その XYZは何でもありです。もしかしたら というこの惑星の外にいる宇宙人 プログラムです。もしかしたら、雷、何らかの を、火山などによる割り込みの形態で行うことができます。 私を変異させる。そうかもしれません 誰がどうなるかわからない が私を変えてくれる! だから、あなた 無知な人は、全知全能を装うのはやめましょう。 神、そしてあえてコードに触れないでください。 私がいるところ OK?"。
さて、そんなこんなで
volatile
は、コンパイラがコードを最適化するのを防ぎます。では、Webでサンプルを検索して見てください。
C++規格($7.1.5.1/8)から引用します。
[volatile は、以下のようなヒントです。 に実装する。 積極的な オブジェクトを含む最適化 なぜなら、オブジェクトの値が が検出できない手段で変更される。 の実装が必要です。
関連するトピック
関連
-
[解決済み】Visual Studio 2013および2015でC++コンパイラーエラーC2280「削除された関数を参照しようとした」が発生する
-
[解決済み] explicit キーワードの意味は?
-
[解決済み] 要素ごとの加算は、結合ループよりも分離ループの方がはるかに高速なのはなぜですか?
-
[解決済み] コピーアンドスワップ慣用句とは?
-
[解決済み] C++11では、標準化されたメモリモデルが導入されました。その意味するところは?そして、C++プログラミングにどのような影響を与えるのでしょうか?
-
[解決済み] なぜ、オブジェクトそのものではなく、ポインタを使用しなければならないのですか?
-
[解決済み] template "と "typename "キーワードはどこに、なぜ入れなければならないのですか?
-
[解決済み] 揮発性 vs. 連動性 vs. ロック性
-
[解決済み] Intel CPU の _mm_popcnt_u64 で、32 ビットのループカウンターを 64 ビットに置き換えると、パフォーマンスが著しく低下します。
-
[解決済み】なぜC++プログラマは'new'の使用を最小限に抑えなければならないのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】 unsigned int vs. size_t
-
[解決済み】C++ - 解放されるポインタが割り当てられていないエラー
-
[解決済み] error: 'ostream' does not name a type.
-
[解決済み】C++エラー:の初期化に一致するコンストラクタがありません。
-
[解決済み】fpermissiveフラグは何をするのですか?
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み] [Solved] インクルードファイルが開けません。'stdio.h' - Visual Studio Community 2017 - C++ Error
-
[解決済み】警告 - 符号付き整数式と符号なし整数式の比較
-
[解決済み] 配列のベクトルを扱う正しい方法
-
[解決済み】揮発性のあるものはなぜ存在するのか?