C++线程内存持续上升,很迷惑

一个C++ 存图线程,用的cv::imwrite存图,线程内只写一个imwrite的时候内存占用正常不增加;写两个imwrite的时候内存占用持续增加,直到out of memery。

一开始我觉得是内存泄漏,但是没有new什么东西,不像这个问题;后来我觉得的是线程数据堵塞,但是中间没有图片过来的时候,内存占用只会原地停住不动,不会减少,不像是数据堵塞;然后就不知道该怎么整了。

img

就是上图那两个cv::imwrite,写一个的时候程序正常。像上图那样写两个就内存持续上升了。请问有什么解决的办法吗

没怎么看懂你这个逻辑
首先,死循环里没有if,那你的线程就永远不停的存图,什么时候停呢
其次,没有sleep,即使内存不爆炸,cpu不跑满了吗

看到你写两个图片,是两个矩阵在保存两张图片。

后面释放了img_data

需要确定具体是哪个矩阵保存图片会出现内存飙升

先做测试:

  1. 每次只保存深度图数据,内存会不会升高?
  2. 每次只保存颜色图数据,内存会不会升高?
  3. 先确定是两个一起保存才升高的原因,是不是因为新加那一个图片写入的问题。

最后,检查你释放的img_data逻辑,mat内部是由指针数据的, 正常一般是浅copy,

while循环里边没有sleep,每次次结是由于linux系统释放不及时,数据实际上并没有立即被释放,导致内存升高,先加个sleep。

不加sleep,CPU是跑满的,被这个线程占住了,不会处理其他事情

检查下ImageData类里面的问题