我创建了一个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);
但是,我没有看到这影响了任务管理器中的内存使用情况。
对我有什么想法?
提前致谢...
答案 0 :(得分:2)
内存未返回系统。
在大多数运行时环境中,从操作系统分配给应用程序的内存仍保留在应用程序中,很少返回给操作系统。释放内存块允许您从应用程序中重用该块,但不会将其释放到操作系统以使其可供其他应用程序使用。
UPD:
所以无论如何,任务管理器不能成为控制内存分配和解除分配的可靠工具。如果您想保证您的应用程序没有内存泄漏,您可能需要使用诸如valgrind(如果您使用的是Linux),或谷歌的drMemory或其他几个(google用于“内存泄漏检测”)等工具。在这种情况下,您将获得有关分配,解除分配,泄漏,内存访问违规等的最准确信息。