27

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

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

では、共有メモリよりもmmapファイルを使用する利点はありますか?

ありがとう。

4

3 に答える 3

18

区別は必ずしも明確ではありません。共有メモリは、メモリマップトファイルを介して実装できます。 これに関する優れた記述はここにあります(C / C ++プログラミングに適用されます)。

于 2010-02-14T21:22:09.003 に答える
2

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

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

于 2010-02-14T21:28:25.817 に答える
0

基本的に共有メモリはIPCの一種です。共有領域はメモリのみ(RAM)で作成される/ dev / shmに作成され、ディスク操作を必要としないため、IPCのより高速な方法です。ディスクファイルを使用してからmmapも使用しますが、比較的低速になります。または、ディスクファイルでバックアップされないmmapでMAP_ANONYMOUSをいつでも使用できます。

于 2011-10-02T17:41:37.667 に答える