共有メモリ
同じ物理ページを複数プロセスの仮想アドレス空間へマップし、同じバイト列を複数プロセスから見せる仕組み。同期そのものではない。
- 概念URI
https://comcomponent.com/knowledge/shared-memory/
- 別名・表記
- Shared Memory / 共有メモリIPC
- 下位概念
- CreateFileMapping/MapViewOfFile / shm_open/ftruncate/mmap
- 最終確認日
- 2026-08-01
- 機械可読データ
- JSON-LD
この概念が関わる関係
- 共有メモリはCreateFileMapping/MapViewOfFileを利用します。Windowsでは共有メモリの骨格としてCreateFileMapping/OpenFileMapping/MapViewOfFileを利用する。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- 共有メモリはshm_open/ftruncate/mmapを利用します。POSIXでは共有メモリの骨格としてshm_open/ftruncate/mmapを利用する。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- 共有メモリは途中状態の読み取りの原因になることがあります。同じfile mapping objectから作ったviewは同時点でcoherentだが、それは読者が常に一貫した更新済みレコードを読めることを意味しないため、同期なしで複数フィールドを読むと途中状態を読んでしまうことがある。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- control planeとdata planeの分離は共有メモリに対する本記事の推奨です。開始・停止・通知はメッセージ系、データ本体は共有メモリという分離が、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 共有メモリの固定ヘッダは共有メモリに対する本記事の推奨です。magic・abi_version・state・generation・heartbeatを持つ固定ヘッダを先頭に置くことが、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- オフセット参照は共有メモリに対する本記事の推奨です。参照をポインタではなくbase+offsetで持つことが、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- process-localな資源は共有メモリと両立しません。同じmappingを別プロセスでmapしても仮想アドレスは一致するとは限らないため、生ポインタやHANDLEなどprocess-localな資源をそのまま共有メモリに置いても他プロセスでは意味を持たない。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 共有メモリは共有メモリのABI設計を前提とします。共有メモリはAPIではなくABI(バイナリインターフェース)の話であり、型サイズ・alignment・padding・構造体の並び順の一致を前提とする。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 共有メモリは初期化レースの原因になることがあります。作った側が初期化したはずという思い込みのまま参加者が同時に初期化したりopen直後に使ったりすると、初期化レースが起こることがある。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- クラッシュ復旧設計は共有メモリに対する本記事の推奨です。generation番号・最終commit済みsequence・heartbeatなどによる復旧手順を用意することが、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 共有メモリはfalse sharingとキャッシュライン競合の原因になることがあります。producerとconsumerが更新するカウンタなど、更新頻度の高いフィールドが同じキャッシュラインに乗っていると、false sharingが起きて性能が落ちることがある。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典
- 共有メモリは名前空間と権限(Global/Local)で構成できます。Windowsの名前付き共有メモリは、Global\/Local\の名前空間、ACL、SeCreateGlobalPrivilegeなどの権限で構成される。 / 確度: 条件付きの関係 / 確認日: 2026-08-01 出典 出典
- 世代ごとのサイズ固定運用は共有メモリに対する本記事の推奨です。サイズはその世代では不変にし、拡張が必要なら新しい世代のsegmentへ切り替えることが、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典 出典
- 共有メモリは他マシンとの共有と両立しません。共有メモリは基本的に同一ホスト内の仕組みであり、他マシンとの共有には向かない。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- 通知を別チャネルへ逃がす設計は共有メモリに対する本記事の推奨です。readyフラグを共有メモリに置くだけでなく、通知はevent・semaphore・named pipeなど待てるprimitiveへ逃がすことが、共有メモリ設計に対する本記事の推奨である。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
- busy loopによるポーリング通知を共有メモリに用いることは推奨されません。共有メモリ上のreadyフラグをbusy loopでポーリングする通知設計は、CPUの浪費や取りこぼしの原因になるため推奨されない。 / 確度: 確立した関係 / 確認日: 2026-08-01 出典
この概念を扱う記事
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。