无法释放OpenCV无符号字符矩阵内存

时间:2014-02-23 17:30:14

标签: c++ opencv matrix

我正在开发一个OpenCV矩阵缓存系统的简单实现。作为其中的一部分,我不断加载和释放cv::Mat个对象,只需将其解除引用为:

cv::Mat mat = ...

mat = cv::Mat();

当处理类型为CV_8U的矩阵时,内存不会被释放并返回到操作系统,而类型为CV_32F的矩阵。

重现问题的示例程序是:

#include <opencv2/core/core.hpp>

int main(int argc, char **argv) {

    printf("-- Loading matrix of ones, press enter to continue...");

    getchar();

    cv::Mat mat = cv::Mat::ones(3000, 32, CV_8U);

    printf("-- Freeing memory, press enter to continue...");

    getchar();

    mat = cv::Mat();

    printf("-- Done, press enter to continue...");

    getchar();

    return 0;
}

使用类型CV_32F时,内存有效释放并返回到操作系统,而类型CV_8U则没有。要检查内存是否空闲,我只是查看系统进程监视器。

我的系统是基于x86_64架构的Ubuntu 12.10。我正在使用g ++ 4.7.2作为编译器,而OpenCV 2.4.6.1与我通过PPA安装的ROS Groovy捆绑在一起。

0 个答案:

没有答案