私は最近、using volatileの質問をしました。非常にの情報の記事がメモリの壁とその用途について議論しています。これらの記事を読んだ後、私はかなり編集的になってしまった。隣接するメモリ領域のmemcpy()安全性
私は64ビットマシンを持っています。複数のスレッドからメモリの隣接した重複しない領域にmemcpyするのは安全ですか?
char buff[10];
はそれが常に安全な一つのスレッドが最初の5バイトにmemcpyをするためのものである最後の5バイトに第二のスレッドのコピー:たとえば、私はバッファを持っていると言いますか?
私の腸内反応(およびいくつかの簡単なテスト)はこれが完全に安全であることを示していますが、私は完全に私を納得させることができるどこにでもドキュメンテーションを見つけることができませんでした。
これは、メモリがvolatileと宣言された場合はプロセッサ、コンパイラの最適化レベルによって異なります。一般に、各コアはキャッシュの独自のコピーに書き込みます。キャッシュのコピーは、プロセッサが後でフラッシュアウトする際に後で解決します。実際のメモリ同期障壁は、実際に書き込まれたメモリを実際に読み込もうとする際に、決定論的な振る舞いを得るためには完全に必要であることが明らかです。 –
x86/x64など多くのプロセッサはキャッシュ一貫性があります(http://en.wikipedia.org/wiki/Cache_coherency)。 2つのコアは同じキャッシュラインを保持することができ、両方のコピーは常に同じ値を保持するように常に最新の状態に保たれます。言うまでもなく、2つのコアから同じキャッシュラインにアクセスすることは、パフォーマンスに大きな影響を与えます。 – Timo
@Adam:幸いにも、私は執筆だけを心配しています。さもなければ、私はおそらくさらに妄想的であろう。 – JaredC