次の方法で共有


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

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

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

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

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

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

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