C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C++/CLI で vector を使ったときのメモリの解放


(過去ログ 72 を表示中)

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■42238 / inTopicNo.1)  C++/CLI で vector を使ったときのメモリの解放
  
□投稿者/ 雲 (3回)-(2009/10/10(Sat) 06:13:31)

分類:[C++/CLI] 

最近、非常に大きなメモリ領域(1GB以上)を使う必要があるコードを C#, C++/CLI で書いているのですが、その際、メモリ領域の解放について、ちょっと、悩んでしまっています。例えば、C# から呼び出された C++/CLI のクラスの関数の中で、(ローカル変数として)vector で領域を500MBくらい確保した後にその関数を抜けても、ProcessExplore で見ると virtual Memory の Virtual Size の値が vector で確保した領域が解放されているにも関わらず全然変化しません。これは、恐らく、再度、vector などでメモリの領域を確保することが必要となったときのための配慮だと思うのですが、この領域を開放する方法ってないのでしょうか?

何が困っているのかというと、この処理を行った後に GetDIBSection を呼び出してDIBを作成したいのですが、残念ながら、メモリ不足ということで正常にGetDIBSection が作成されません。ちなみに、vector で領域の確保/解放をしないようにしてみると正しくGetDIBSectionが動作します。

え、vector を使わなければいいって?まぁ、そうですが、既にかなり出来上がってしまっているので可能なら何とかこのままいけると嬉しいのです。

よろしくお願いします。

引用返信 編集キー/
■42239 / inTopicNo.2)  Re[1]: C++/CLI で vector を使ったときのメモリの解放
□投稿者/ επιστημη (2198回)-(2009/10/10(Sat) 07:13:51)
επιστημη さんの Web サイト
std::vector<int> v;
ここでたくさん使う...
std::vector<int>(v).swap (v); // ←お掃除のおまじない

ダメ元でお試しください。
「shrink-to-fitのおまじない」です。



引用返信 編集キー/
■42241 / inTopicNo.3)  Re[2]: C++/CLI で vector を使ったときのメモリの解放
□投稿者/ 雲 (4回)-(2009/10/10(Sat) 09:06:33)
No42239 (επιστημη さん) に返信

> ダメ元でお試しください。
> 「shrink-to-fitのおまじない」です。

ありがとうございます。無事に、解放されることを確認しました。

せっかくなので、shrink-to-fie を含む参考のURLを書かせてください。

http://ja.wikibooks.org/wiki/More_C%2B%2B_Idioms
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -