【发布时间】:2013-09-02 03:53:11
【问题描述】:
我有一个 for 循环,我在其中创建了一个本地 cv::Mat 对象来存储图像。代码如下所示:
for (int iter = 0; iter < totalNumberOfIterations; iter++)
{
cv::Mat I = cv::imread(argv[1], 0);
std::cout << "Reference count I: " << *I.refcount << std::endl;
I.release();
}
在循环的第一次迭代中,我发现为变量“I”分配了内存,当我调用 I.release() 时,它被释放了。在随后的迭代中,内存不会被释放,我的程序的 RAM 消耗保持不变。似乎 OpenCV 为变量“I”保留内存以用于优化目的。这是真的吗?
在 for 循环的所有迭代中,变量“I”(*I.refcount)的引用计数保持为 1。
我正在使用 OpenCV 2.4.4,并且正在使用 gcc 4.6.4 编译我的代码。为了检查内存消耗,我在我的 Ubuntu 13.04 机器上使用了命令“top”。
编辑:当我不强制 OpenCV 读取灰度图像时,我注意到正在为变量“I”释放内存。 (注意第二个参数在 imread 命令中设置为“1”)。
cv::Mat I = cv::imread(argv[1], 1);
【问题讨论】:
标签: c++ opencv memory-management