CreateFileMappingを用いた共有メモリの動作を確認しています。
同じプログラムを多重に起動して、下記のようなステップが実行された場合、
2回目以降に実行されたプログラムについてはERROR_ALREADY_EXISTSが発生します。
C++
1CreateFileMapping(INVALID_HANDLE_VALUE, NULL PAGE_READWRITE, 0, sizeof(10), "memory");
ここまでは想定通りなのですが、プログラムを一旦すべて終了した後に、再実行した場合はERROR_ALREADY_EXISTSは発生せず新たな共有メモリを作成する動きをします。同じ"memory"という名前の共有メモリなので、既に存在しているものをオープンすると思っていました。
プログラム内で共有メモリのクローズはしていないので、共有メモリ自体は存在し続けていて、既に存在している共有メモリとは別の領域に共有メモリを作成しているのでしょうか?
またクローズしていないのでメモリリークが発生しているのでしょうか?
クローズしていないというのは下記3,4をしていないことだと認識しています。(動作確認では1のCreateFileMappingだけ実行しました)
1.CreateFileMapping で共有メモリを作成(またはオープン)
2.MapViewOfFileでマッピング(読み書きできるようにする)
3.UnmapViewOfFileでマッピング解除
4.CloseHandleで共有メモリを解放
下記のページ等を参照しましたが、詳細な動きが分かりませんでした。
Creating Named Shared Memory

回答1件
あなたの回答
tips
プレビュー