質問

このテーマについて少し学んだ人は、POSIX 共有メモリ (shm_open) と POSIX マップ ファイル (mmap) の本当の違いが何であるかを理解できるでしょうか。

どちらも、古い IPC メカニズムではなく、/dev/tmpfs サブシステムを使用しているようです。

では、共有メモリよりも mmap ファイルを使用することに利点はあるのでしょうか?

ありがとう。

役に立ちましたか?

解決

の区別は必ずしも明確ではありません。共有メモリは、メモリマップファイルを介して実施することができます。 この上の優れた書き込みは、ここ(のように見つけることができますC / C ++プログラミング)に適用した。

他のヒント

私の理解では、共有メモリはマップされたファイルの上に構築されると考えていますが、 このページ メモリ マップト ファイルを共有メモリとして使用できる機能が条件付きであることを示しているようです。

mmap() 関数の使用は、QSHRMEMCTL システム値によって制限されます。このシステム値が 0 の場合、mmap() 関数は PROT_WRITE 機能を持つ共有マッピングを作成できない場合があります。基本的に、これにより、マップされるストリーム ファイルの内容を変更する可能性のあるメモリ マップの作成が防止されます。flags パラメーターが MAP_SHARED を示し、prot パラメーターが PROT_WRITE を指定し、QSHRMEMCTL システム値が 0 の場合、mmap() 関数は失敗し、エラー番号 EACCES が発生します。

したがって、それはIPC.Although IPCのより速い方法ができている、

基本的に、共有メモリは、メモリのみ(RAM)で作成されたの/ dev / SHMに作成されIPC.The共有領域の形態であり、それにはディスク操作を必要としませんディスク・ファイルを使用して、その後、あまりにものmmapを使用して行われ、それはあなたが常にディスクファイルをバックアップしていないのmmapでMAP_ANONYMOUSを使用することができますcomparetively slow.Alternativelyになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top