次の方法で共有


割り当てられたメモリのスコープ

メモリ割り当て関数 (HeapAlloc、VirtualAllocGlobalAlloc、または LocalAlloc) を使用してプロセスが割り当てるすべてのメモリには、プロセスのみがアクセスできます。 ただし、DLL によって割り当てられたメモリは、DLL を呼び出したプロセスのアドレス空間に割り当てられ、同じ DLL を使用する他のプロセスにはアクセスできません。 共有メモリを作成するには、ファイル マッピングを使用する必要があります。

名前付きファイル マッピングを使用すると、共有メモリのブロックを簡単に作成できます。 CreateFileMapping 関数を使用してファイル マッピング オブジェクトを作成するときに、プロセスで名前を指定できます。 他のプロセスでは、CreateFileMapping 関数または OpenFileMapping 関数に同じ名前を指定して、マッピング オブジェクトへのハンドルを取得できます。

各プロセスは、 MapViewOfFile 関数のファイル マッピング オブジェクトへのハンドルを指定して、ファイルのビューを独自のアドレス空間にマップします。 1 つのファイル マッピング オブジェクトのすべてのプロセスのビューは、物理ストレージの同じ共有可能ページにマップされます。 ただし、 MapViewOfFileEx 関数を使用してビューを指定したアドレスにマップしない限り、マップされたビューの仮想アドレスはプロセスごとに異なる場合があります。 共有可能ですが、マップされたファイル ビューに使用される物理ストレージのページはグローバルではありません。ファイルのビューをマップしていないプロセスからはアクセスできません。

マッピング オブジェクトのビューを持つ最後のプロセスが UnmapViewOfFile 関数を呼び出してビューを終了またはマップ解除すると、ファイルのビューをマッピングすることによってコミットされたすべてのページが解放されます。 現時点では、マッピング オブジェクトに関連付けられている指定されたファイル (存在する場合) が更新されます。 FlushViewOfFile 関数を呼び出すことで、指定したファイルを強制的に更新することもできます。

詳細については、「 ファイル マッピング」を参照してください。 DLL の共有メモリの例については、「 Dynamic-Link ライブラリでの共有メモリの使用」を参照してください。

複数のプロセスが共有メモリへの書き込みアクセス権を持つ場合は、メモリへのアクセスを同期する必要があります。 詳細については、「 同期」を参照してください。