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

内存不返回给系统。

在大多数运行时环境中,从操作系统分配给应用程序的内存保留在应用程序中,并且很少返回给操作系统。释放内存块允许您在应用程序内重用该块,但不会将其释放到操作系统以使其可用于其他应用程序。

升级版:

所以无论如何任务管理器都不能成为控制内存分配和释放的可靠工具。如果您想保证您的应用程序没有内存泄漏,您可能需要使用诸如 valgrind(如果您在 Linux 上)或来自 google 的 drMemory 或其他几个工具(google 用于“内存泄漏检测”)。在这种情况下,您将获得有关分配、释放、泄漏、内存访问违规等的最精确信息。

于 2012-11-04T15:50:44.647 回答