[ C++で開発 ]
共有メモリは、同一マシン上で複数のプロセスの間で共有されるメモリ領域です。普通、プロセス毎に独立した論理アドレス空間(プロセス空間)が割り当てられるので、プロセスから見えるメモリは他のプロセスからはアクセスできません。プロセス間でデータの授受ができるように、プロセス空間とは別な領域にメモリを割り当て、ここを複数のプロセスからアクセスできるようにしたものが共有メモリです。
API名 | |||
---|---|---|---|
CreateFile | |||
CreateFileMapping | |||
MapViewOfFile | |||
UnmapViewOfFile | |||
CloseHandle |
※双方のプロセスでCreateFileMapping()を行う必要がある。
HANDLE CreateFileMapping( HANDLE hFile, LPSECURITY_ATTRIBUTES SecurityAttr DWORD Protect, DWORD MaxSizeHigh, DWORD MaxSizeLow, LPCTSTR MapName);
hFileはCreateFileで生成されたファイルハンドルだが、0xffffffffを指定した場合はページングファイル上のメモリ領域が使用される。即ち共有メモリである。作成するファイルマッピングのサイズは64bit指定なので、上位32bitをMaxSizeHighで、下位32bitをMaxSizeLowで指定する。ただし、両方を0指定すると、hFileで指定したファイルのサイズとなる。従って、サイズが0のファイルへマッピングしようとするとエラーとなる。また、共有メモリとして0xffffffffを指定した場合は0とは指定できない。
共有メモリとは別な方式ですが、プロセス間でメモリを介したデータ授受を行う方法として、Win32APIのVirtualAllocExを使用することができます。これを使うと、あるプロセスのメモリ空間を別なプロセスから使用できます。