c#とcの揮発性の違いは何ですか?私は1つのインタビューでこれを尋ねられました。C#とCの揮発性の違い
12
A
答えて
16
The article mentioned in this blog postハーブ・サッター(Herb Sutter)著、C、C++、Java、およびC#での揮発性の使い方と意味を簡潔かつ明確に説明しています。
- How to illustrate usage of volatile keyword in C#
- Usage of volatile specifier in C/C++/Java
- What is the “volatile” keyword used for?
- c++ volatile multithreading variables
- volatile and multithreading?
- Why is volatile needed in c? 01:
も、この非常にサイトに良い質問と回答のカップルがあります
EDIT:最初のリンク(Herb Sutterのブログへのリンク)に記載されているDDJの記事には、「exact link」と混同しないようにしてください。
また、Nigel Jonesのthis articleは、埋め込みCプログラミングの文脈でvolatileキーワードを説明しています。この質問がインタビューでポップアップしたように見えるので、同じ著者による私のお気に入り( "exact link")の一つであり、Cの世界で揮発性のもう一つの良い説明があります。揮発性Cで
2
は、変数へのアクセスを最適化しないコンパイラに指示:「(走行)しながら」
int running = 1;
void run() {
while (running) {
// Do something, but 'running' is not used at all within the loop.
}
}
通常コンパイラはわずか「(1)一方、」に、この場合に変換することができます。 'running'変数がvolatileとしてマークされると、コンパイラは毎回変数をチェックするように強制されます。
重要なのは、ハードウェア(CPUキャッシュ、命令パイプラインなど)がまだメモリアクセスを再配列している間に、C 'volatileはコンパイラの最適化を制限するだけです。 Cコンパイラが最適化しないようにハードウェアに指示する方法はありません。あなたはそれを自分で行う必要があります(たとえば、メモリバリアを使用して)。
として、私の知る(私は完全にはよく分からない)とC#の仕様が少しさらにこれをとります
- あなたは揮発性変数に書き込む場合は、すべてのメモリを使うことにアクセスすることを保証されていますそれが完了する前に行う。
- volatile変数から読み込むと、volatile変数の読み込みが完了する前に完了していないメモリアクセスがすべて確実に行われます。
関連する問題
- 1. C#で揮発性とThread.MemoryBarrier
- 2. 揮発性のconst、揮発性レジスタ、C++での揮発性の静的
- 3. C中の揮発性
- 4. C#の非揮発性オブジェクト
- 5. C++揮発物、不揮発メンバー
- 6. は、揮発性
- 7. 揮発性変数とポインタ変数の相違点
- 8. C:関数への揮発性ポインタを宣言する
- 9. 揮発性同等
- 10. 揮発性変数
- 11. スカラ:不揮発性
- 12. 揮発性のconstポインタ
- 13. 例逆アセンブリで揮発性を示すCコード?
- 14. C++で揮発性イテレータを宣言する方法
- 15. C++では、揮発性のshared_ptrとnullptrを比較できますか?
- 16. C++コンストラクタ内で揮発性のポインタとしてこれを作る方法
- 17. "積極的な"揮発性セマンティクスを持つCおよびC++コンパイラ
- 18. 揮発性EquivalenceClassにはsortref
- 19. スレッドセーフ(揮発性なし)
- 20. ビュー対揮発性テーブル?
- 21. Cでこれらの揮発性のポインタの意味は何ですか?
- 22. 揮発性コピーコンストラクタとは何ですか?
- 23. 揮発性オブジェクトが不揮発性メンバ関数を呼び出すことができない理由
- 24. 揮発性資格の喪失
- 25. は揮発性の変数ですか?
- 26. asp.netの不揮発性グローバル変数
- 27. 未使用の揮発性変数
- 28. Visual C#とCとの違い
- 29. TeradataのCTEと揮発性テーブルの差異
- 30. シングルトンが揮発性である場合
あなたのリンクをたどって私は違いを理解できませんでした –
@ルイスFilipe何を正確に理解できませんでしたか? C/C++では "Unusual memory semantics"(HWレジスタ、複数のアドレスでのメモリの記述)に使用されています。 – celavek
あなたはJava/.NET(C#実際のddjの記事に従わなければなりません。それがリンクするのが簡単かどうかはわかりません(広告)。 –