アプリケーション間でメモリマップドファイルを利用してメモリ共有

ヘタにSOCKETとかで通信するより速いという噂。

CreateFileMapping()で ハンドルに INVALID_HANDLE_VALUE を指定するとファイルすら作らない共有ができる


データ送出の流れ

  • CreateFileMappingで、メモリマップドファイルを作成する。
  • MapViewOfFileで、メモリマップドファイルをアドレス空間にマップする。
  • データを書き込む。
  • UnmapViewOfFileで、メモリマップドファイルを解放する。
  • 受信も終わり不要になったら、CloseHandleで、ハンドルを解放する。

データ受取の流れ

  • OpenFileMappingで、名前付きのファイルマッピングオブジェクトを開く。
  • MapViewOfFileで、メモリマップドファイルをアドレス空間にマップする。
  • データを読み込む。
  • UnmapViewOfFileで、メモリマップドファイルを解放する。
  • 受信も終わり不要になったら、CloseHandleで、ハンドルを解放する。


ミューテックス(CreateMutex)で読み書き同時によるデータ破損にも対応しよう

ネタ元