gpt4 book ai didi

c++ - 释放 std::list c++ 的内存

转载 作者:行者123 更新时间:2023-11-27 23:48:46 24 4
gpt4 key购买 nike

我想释放包含 cv::Mat 类型的列表容器的内存。我在这里读了很多书并尝试了以下方法,但没有用:

std::list<Mat> images; // This is a static member object;

交换技巧:

std::list<Mat>().swap(images);

std::list<Mat> foo;
foo.swap(images);

删除每个垫子:

for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
it = images.erase(it);
}

释放每个垫子:

for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
it->release();
}

使用 std::list* 指针:

delete std::list<Mat>* images;
images = new std::list<Mat>;

使用 free() 释放每个 Mat 的内存:

for (std::list<Mat>::iterator it = images.begin(); it != images.end(); ++it)
{
free(&(*it));
}
images.clear();

调整列表大小:

images.resize(0);
images.clear();

我无法在堆/作用域中创建数据,所以它会在退出时被删除。它必须是静态成员对象。 vector 也不适合我,因为任意矩阵的多次删除。

有人知道我可以做什么来释放内存吗?

最佳答案

清除列表只需要images.clear()

请注意,C++ 标准库和 C 堆分配器缓存内存不会立即将其返回给操作系统。您可以尝试调用 malloc_trim(0) 来要求 C 堆分配器将内存返回给操作系统,但不需要满足此请求。

关于c++ - 释放 std::list<cv::Mat> c++ 的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48447201/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com