揮発性変数は、どのセクションに格納されているプログラムメモリに格納されていますか?揮発性変数
揮発性変数
答えて
変数のボラティリティは、変数が格納されている場所を変更しません。それが変わるのは、読み書きに関してアクセスする方法の意味です。
私はC標準がvolatileの実装について何も言わないと思います。しかし、典型的には、変数の書き込み操作のセマンティクスを解放し、変数の読み出し操作のアクアセマンティクスを揮発性の保証で解放します。しかし、これはすべての実装に当てはまるわけではなく、特定のコンパイラが保証するものを読むべきです。
メモリの「特別な」セクションに揮発性変数を格納する理由はありません。通常、不揮発性の変数を含む他の変数とともに格納されます。いくつかのコンパイラがvolatile変数をメモリの特別な部分に格納することを決定した場合、それを防ぐことは何もありません。しかし、言語レベルでは絶対に理由はありません。
なぜこのような質問をしていますか?あなたはそれがはのメモリのいくつかの特別なセクションに格納する必要がありますと思った?
In C volatile
は、 "この変数の値が変更されていないと仮定するのに十分な知識がありません"とコンパイラに伝えます。 BSS、CSSなどの「セクション」はありません。
特定のタイプの最適化を防止するために、コンパイラにフラグを設定することを検討してください。ハードウェアデバイスの入力により特定のアドレスのメモリが「変更」する可能性のある組み込みプログラミングに非常に便利です。
はここで良い説明です:http://www.embedded.com/columns/programmingpointers/174300478?_requestid=137658
volatile
はtype qualifierないstorage class specifierので、それはまったく保管場所を決定するものではありません。それは変数ではなく、変数の型定義に影響します。
それは単に、むしろ例えばレジスタ内のいくつかの以前に読み込まれた値が有効なままであることを仮定よりも(どこそれがかもしれない)、明示的に変数の保管場所からそのタイプvolatile
ある変数を読み取るために、コンパイラを強制します。
volatileはストレージクラスを処理することはありません。
volatileはコンパイラに指示するか、コンパイラにその変数の "最適化を行わない"ように指示します。 コンパイラはその変数のコードを最適化しておらず、以前の値を保持するインターレースレジスタではなく、指定された場所から値を読み込みません。
変数をvolatileと宣言すると、外部イベントによって変更される可能性のある最新の値が取得されます。
その変数を揮発性として宣言していないとコードが正常に動作する可能性がありますが、時には正しい値が得られない可能性があります。 変数をvolatileとして宣言する必要がないようにします。
volatileは、ハードウェア関連のピンの割り込みなどの外部イベントを処理するときに一般的に使用されます。
例。 adc値を読み取ります。
const voltile means コード内のその変数の値を変更または変更することはできません。外部イベントのみが値を変更できます。
コントローラピンは一般に揮発性と定義されています。 は、揮発性コントローラが "ラッチによって読み込まれる"ではなく、 "ピンによって読み出される"ように変数を宣言することによって可能性があります。これは私の仮定です。その値が予期せず変更される可能性がいつでも
変数がvolatile宣言されなければならない。.. ...
間違っているが、まだ揮発性として変数を選択する混乱の多くがあります。実際には、変数の3種類のみ変更することができ:
メモリマップ周辺レジスタマルチスレッドアプリケーション
内のルーチングローバル変数割り込みサービスによって修飾
グローバル変数
リンク:http://eetimes.com/discussion/beginner-s-corner/4023801/Introduction-to-the-Volatile-Keyword
したがって、このような場合にはvolatileとして変数に提供されます。
メモリマップされたデバイスを使用できるように、C/C++仕様では「揮発性」が使用されていました。このキーワードで定義された変数を最適化しないようにコンパイラに指示します。なぜなら、変数がコンパイラ可視コード内の状態を変更しないように見えるからです。
- 1. アクセシビリティの揮発性変数
- 2. は揮発性の変数ですか?
- 3. 揮発性変数によるピルトバックバックエラー
- 4. エクセルVBAスタティック(不揮発性)変数 - ユーザーフォーム
- 5. asp.netの不揮発性グローバル変数
- 6. 揮発性の変数をキャストする
- 7. 未使用の揮発性変数
- 8. 揮発性のconst、揮発性レジスタ、C++での揮発性の静的
- 9. は、揮発性
- 10. 揮発性変数とポインタ変数の相違点
- 11. スカラ:不揮発性
- 12. 揮発性同等
- 13. arduinoスレッドの揮発性変数の変更
- 14. 揮発性変数には同期アクセスが必要ですか?
- 15. gcc:__sync_lock_test_and_set VS。 =揮発性変数を持つ演算子
- 16. 揮発性原子変数によるアトミック演算
- 17. 揮発性(時間依存)変数は存在しますか?
- 18. 揮発性変数と同期化されたセッターとゲッター
- 19. 揮発性int変数をextern intとして定義する
- 20. なぜ揮発性変数は通常非公開ですか?
- 21. cortex-m3で64ビットの揮発性変数を読み取る
- 22. 揮発性のconstポインタ
- 23. C#の非揮発性オブジェクト
- 24. 揮発性EquivalenceClassにはsortref
- 25. C++の揮発性クラスメンバー
- 26. ビュー対揮発性テーブル?
- 27. C中の揮発性
- 28. C#で揮発性とThread.MemoryBarrier
- 29. スレッドセーフ(揮発性なし)
- 30. 揮発性オブジェクトが不揮発性メンバ関数を呼び出すことができない理由
いいえ、これらのセマンティクスには、[this](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2016.html)と[CERT](https ://www.securecoding.cert.org/confluence/display/seccode/POS03-C.+Do+not+use+volatile+as+a+synchronization+primitive) '同期に 'volatile'を使わないでください' – Spudd86