- ベストアンサー
メモリについて
C++で開発を行っています。 メモリ使用量についての質問です。 new でオブジェクトを大量に生成した後、deleteにて開放した場合、 タスクマネージャー上のPF使用量は生成前の状態に戻らないのでしょうか? 自分のマシンでは戻るのですが、他のマシンで確認すると戻りません。 マシンの性能やメモリ使用状態による?異なるのでしょうか? どなたか教えていただけないでしょうか。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
PFの管理はOSの仕事なので、直接手出しはできないです。 たぶん、メモリの断片化(フラグメンテーション)が起きているのだと思うのだけれど。 http://www.uquest.co.jp/embedded/learning/lecture43.html 自前で何とかしたい場合はメモリプールとかを使用するのが良いかも。
その他の回答 (3)
- maiko0318
- ベストアンサー率21% (1483/6969)
>ほかにメモリを大量に使用するようなソフトは立ち上げていない状態です。 大量でなくても、たとえ1バイトでも使っちゃうと起こりえます。 >先にも書いたとおり、他のマシンでは戻ります。。 こういうところはOS依存と言いまして、OSによってはサポートしていないところが随分あります。
- wormhole
- ベストアンサー率28% (1626/5665)
ライブラリの仕様によります。 new, deleteなどはOSに対して直接メモリの確保要求や解放要求を行っているとは限りませんし、仕様的にもそのようには明言されていません。
- maiko0318
- ベストアンサー率21% (1483/6969)
あなたが確保している間に他のソフトがその次を使っちゃった場合は戻りませんね。 あと、deleteが即時行われているかどうかにもよります。
補足
ほかにメモリを大量に使用するようなソフトは立ち上げていない状態です。 newで1GBほど上がるのですが、deleteで戻るのは半分ほどです。 delete後にメッセージボックスを表示するようにして中断しているのですが、時間がたってもかわりません。 newとdeleteを繰り返しているのですが、だんだん使用量が増えていって最後メモリエラーとなってしまいます。 先にも書いたとおり、他のマシンでは戻ります。。
お礼
わかりやすいご説明、ありがとうございます。 原因がわからないのですが、リビルドをしたところとりあえず戻るようになりました。 ですがOSの仕事=ブラックボックスなので、メモリプール等も考えてみます。 ありがとうございました。