2011-12-22 158 views
2

共有メモリの使用に関する2つの質問があります。 CreateFileMappingを使用して、2つのプロセス間に共有メモリ領域を作成しています。CreateFileMappingとMapViewofFileで共有メモリを使用する場合の問題

1)私は、メモリを解放するためにCreateFileMappingまたはOpenFileMappingコールから返されたすべてのハンドルでCloseHandleを呼び出す必要があることを理解しています。 CloseHandleを呼び出さずに共有メモリを使用しているプログラムが終了した場合、私の質問は、すべてのハンドルが適切に閉じられ、Windows XP/7によってmemの割り当てが解除されるかどうかです。 IEを使用しているすべてのプロセスが閉じられた後、IEがリークする可能性はありますか?

2)MapViewofFileを使用して、memへのポインタを取得します。 1つのインスタンスでは、共有メモリは常にメソッドのコンテキスト内に存在すると仮定しました。だから私はポインタとしてMapViewOfFileの戻り値を保存し、memへのハンドルを閉じて、ちょうど共有mem(まだそれへのアクセスをロックする)へのポインタを使用しています。これは安全ですか?また、共有メモリにアクセスするたびにMapViewOfFileを呼び出す必要がありますか?

おかげで、

イアン

答えて

6

1)があり、すべてのハンドルは、プロセスが終了すると、どんなにそれが死ぬか、うまく終了した場合は閉鎖されています。ここには漏れはありません。

2)限り、あなたはUnmapViewOfFileを呼び出さないように、メモリはまだハンドルが閉じられている場合でも、プロセスにづけし次のようになります。

アプリケーションがために使用されるファイルハンドルを閉じることがありますが、ファイルマッピングオブジェクトを作成すると、ファイルの最後のビューがマップされなくなるまで、対応するファイルが保持されます。

+0

ありがとう、ありがとうございます。それがすべてだった。 – Ian

関連する問題