一个C++ 存图线程,用的cv::imwrite存图,线程内只写一个imwrite的时候内存占用正常不增加;写两个imwrite的时候内存占用持续增加,直到out of memery。
一开始我觉得是内存泄漏,但是没有new什么东西,不像这个问题;后来我觉得的是线程数据堵塞,但是中间没有图片过来的时候,内存占用只会原地停住不动,不会减少,不像是数据堵塞;然后就不知道该怎么整了。
就是上图那两个cv::imwrite,写一个的时候程序正常。像上图那样写两个就内存持续上升了。请问有什么解决的办法吗
没怎么看懂你这个逻辑
首先,死循环里没有if,那你的线程就永远不停的存图,什么时候停呢
其次,没有sleep,即使内存不爆炸,cpu不跑满了吗
看到你写两个图片,是两个矩阵在保存两张图片。
后面释放了img_data
需要确定具体是哪个矩阵保存图片会出现内存飙升
先做测试:
最后,检查你释放的img_data逻辑,mat内部是由指针数据的, 正常一般是浅copy,
while循环里边没有sleep,每次次结是由于linux系统释放不及时,数据实际上并没有立即被释放,导致内存升高,先加个sleep。
不加sleep,CPU是跑满的,被这个线程占住了,不会处理其他事情
检查下ImageData类里面的问题