2

mmap() を使用してプロセス間でメモリを共有したい。mmap() は、通常のファイルまたは POSIX 共有メモリ ファイル (shm_open) に適用できます。しかし、違いは何ですか?違いは、ディスクにアクセスするかどうかではありません。

  • 頻繁にアクセスされ、最近アクセスされた通常のファイルは、ファイルシステムのキャッシュ/バッファーに存在するため、それらのコンテンツは既にメモリ内にあります。
  • shm_open() で mmap() を使用する場合でも、システムが高いメモリ ストレス下にある場合、そのメモリ領域がスワップ アウトされることがあります。
4

1 に答える 1

2

1 つの違いは、共有メモリはディスクに書き込まれる可能性がありますが、永久にディスクに書き込まれることはないということです。通常のファイルを作成すると、再起動後も保持されます。共有メモリ オブジェクトを作成しても、作成されません。その点では、一時ファイルのように動作します。

もう 1 つの違いは、「名前がファイル システムに表示されるかどうかは指定されておらず、パス名を引数として受け取る他の関数から参照できる」ことです。したがって、共有メモリ オブジェクトにはファイルのようなパスがありますが、実際にファイル システムに表示される必要はありません。

実際、これらの違いは両方とも、ファイルシステムからの切り離しに関するものです。ファイルと共有メモリ オブジェクトはどちらも読み取りと書き込みが可能なバイトのバッグですが、ファイルはファイル システムに永続化されるという点で異なります。

于 2012-11-04T13:17:45.983 に答える