PROFIからSUPER PROFIへの質問-1. - ページ 29

 
sergeev:

ハンドルを閉じるときに、(CreateFileMappingで指定した以上に割り当てられた)メモリは元に戻らないのでしょうか?
解放されるのです。でも、最後にあるんですよ。メモリを節約しながら進めなければならない。
 
勝ち負けとか、手のひら返しとか、アプリケーションの終了とか、何の終了時に?
 
sergeev:
勝ち負けとか、手のひら返しとか、アプリケーションの終了とか、何の終了時に?
どちらか一方を選ぶことができます。それでも、終わりなんです。
 
あ、でも、ヘッダを閉じているのであれば、メモリリークはないと思いますよ、ヘッダを削除したときにWindowsがメモリを解放するのは普通のことですから
 

実行中にディスクリプターを閉じてメモリを解放するのは、何となく間違っているような気がします。

ウィンドスに期待せずとも、メモリは解放されるはずです。

 
MSDN for Mappingには、ハンドラを閉じる前に手動でメモリを解放 することについては何も書いてありません。
 
sergeev:
MSDN for Mappingには、ハンドラを閉じる前に手動でメモリを解放することについては何も書いてありません。
まあ、ハンドルを閉じた後というわけではありませんが。メモリを扱う際には、動的にサイズを変更する必要があります。でも、ずっとやる必要はないんです。一定の再配分には時間がかかる。
 

ヴァディム、私たちはいったい何を解析しているのですか?

メモリを増設する方法が2つ 見つかりました。 どちらの場合も、メモリーリークの問題は発生すると思いますか?

 

すべてのディスクリプタが閉じていれば、漏れはない。リーケージとは、プログラムがアンロードされても、リソースが占有されたままであることです。

しかし、メモリを過剰に消費する問題が発生する可能性があります。私自身も少し前まではそのような悩みを抱えていました。時系列を扱うクラスを間違えて接続してしまいました。秒単位で刻みをインデックス化するクラスを追加しました。このクラスを使って月足棒を扱うようになった。30秒でメモリを全部食っちゃったよ。これは考えられるバリエーションの一つです。このようなことを監視し、警告を発するべきでしょう。

2つ目のケースは、プログラムが1000Mbなど多くのメモリを必要とするが、長時間使用しない場合である。もし解放しなければ、あなたのプログラムがアンロードされるまで、他のプログラムは1000MB少なくなります。

要するに、リソースの消費量を把握する必要があるのです。

 
わかりました、考慮します。