3

共有メモリ オブジェクト (shm_open を使用して作成) と共有メモリ セグメント (shmget) の違いは何ですか?

共有メモリの shmmax と shmall の場合のように、調整できない制限はありますか?

これら 2 つの間にパフォーマンスの違いはありますか? また、どのような IPC シナリオでこれらを使用する必要がありますか?

4

2 に答える 2

1

テストで、経由でアクセスしたメモリは、経由でアクセスshm_openしたメモリよりも高速であることがわかりましたshmget。それ以外は、機能の点でかなり似ています。この 2 つの間には、キャッシュまたは TLB に微妙な違いがあるはずですが、内部の詳細についてはよくわかりません。

shm_openこのパフォーマンスを向上させるには、POPULATE オプションを使用する必要があったことに注意してください。

于 2014-09-30T21:20:37.933 に答える
-2

「shmget」は、Linux カーネルに実装されている共有メモリを割り当てる Linux 固有の方法です。

「shm_open」は、mmap を使用してファイルをマッピングすることにより、共有メモリをエミュレートするライブラリ関数です。ファイルは「共有」フラグを使用してマップされるため、メモリはプロセス間で共有されます。

Linux 1.x では、「/dev/shm」ディレクトリ (ファイルを含む) は単なる通常のディレクトリであったため、「shm_open」を使用する共有メモリは実際にはディスク ファイルでした。Linux 3.x では、"/dev/shm" は、共有メモリを実際にディスクに書き込まなければならないことを避けるための特別なディレクトリです。

2つの方法の両方を他の方法に置き換えることができると思います。共有メモリを作成するために 2 つの異なる方法があるのは、歴史的な理由によるものです。

于 2013-10-03T08:41:12.760 に答える