質問: 【c++】共有メモリについて 【c++】共有メモリについて いつもお世話になっています。 共有メモリについて勉強していて、いろいろと調べていて気になったのですが、 「ファイルマッピング」と「メモリマップドファイル」とは 同じものなのでしょうか?全く違うものなのでしょうか? (ちなみに、これらは共有メモリを使用するための1つの方法である、という 認識で宜しいのでしょうか。) また、共有メモリのほうが、ソケット、パイプなどよりも高速アクセスできる 様ですが、どのぐらい高速なのか紹介しているサイトがありましたら 教えて頂けませんでしょうか。
回答: >「ファイルマッピング」と「メモリマップドファイル」とは同じものなのでしょうか? >全く違うものなのでしょうか? 「ファイルマッピング」は(共有メモリのことと限定すれば)、メモリ空間上に共有アクセス領域を作成することです。 「メモリマップドファイル」は上記により作成された、アクセス領域のことです。 >また、共有メモリのほうが、ソケット、パイプなどよりも高速アクセスできる様ですが、 >どのぐらい高速なのか紹介しているサイトがありましたら 環境により違いますから、厳密に比較しているサイトはないでしょう。 「ソケット」や「パイプ」と「共有メモリ」の一番大きな違いはデータのアクセス段数です。 イメージとして、 ソケットやパイプは 「プロセスa」→(ソケット)→メモリ→(ソケット)→「プロセスb」 共有メモリは 「プロセスa」→メモリ→「プロセスb」 となります。 間に別のプロセスが介在しない分、高速アクセスできる「可能性」があります。 (正確には、メモリコントローラーも解するのでもう少し複雑ですが) 尚、共有メモリはアクセスの高速化は規定できる半面、osによっては利用を制限されたり、同時多重アクセスでのメモリ内容の正当性の保証等、対策すべき問題も多々あります。