0

次のように CvMat ポインターのベクトルを作成しました。

vector<CvMat*> items;
for(int i = 0;i<5;i++){
  CvMat* mat = cvCreateMat(5,1,CV_32FC1);
  // assign values to mat
  items.push_back(mat);
}

そして、次のようにメモリを解放しようとしました:

for(int i = 0;i<5;i++){
  cvReleaseMat(&items[i]);
}
vector<CvMat*>().swap(items);

ただし、それがタスク マネージャーのメモリ使用量に影響しているとは思いません。

私に何かアイデアはありますか?

前もって感謝します...

4

1 に答える 1

2

メモリはシステムに戻されません。

ほとんどのランタイム環境では、オペレーティングシステムからアプリケーションに割り当てられたメモリはアプリケーションに残り、オペレーティングシステムに戻されることはめったにありません。メモリブロックを解放すると、アプリケーション内からブロックを再利用できますが、オペレーティングシステムに解放して、他のアプリケーションで使用できるようにすることはできません。

UPD:

したがって、とにかく、タスクマネージャはメモリの割り当てと割り当て解除を制御するための信頼できるツールにはなり得ません。アプリケーションにメモリリークがないことを保証したい場合は、valgrind(Linuxを使用している場合)、googleのdrMemory、または他のいくつかのツール(googleは「メモリリーク検出」)などのツールを使用できます。この場合、割り当て、割り当て解除、リーク、メモリアクセス違反などに関する最も正確な情報が得られます。

于 2012-11-04T15:50:44.647 に答える