我有大量图像(大约 2500 张),其中包含用于相机校准的棋盘。我正在启动几个后台线程来调用
cv::findChessboardCornersSB
来查找这些图像中的棋盘角。在选择要启动的最佳线程数时,我注意到即使在所有分析完成后,仍会永久分配相当大量的内存。
在使用不同数量的线程(1、5、10、15和20)进行测试后,我发现启动的线程数量与分析完成时剩余分配的内存量之间存在明确的相关性,并且它相当大。例如,启动 20 个线程来分析这 2500 个棋盘图像,完成后会分配 3760 MiB。请看下图。
我知道我的代码没有泄漏,因为我可以无限期地连续排队分析越来越多的图像,并且内存消耗虽然很高,但不会随着时间的推移而增加。
我希望比我更了解 OpenCV 的人可以解释造成这种情况的原因,并希望我是否可以采取任何措施来释放这段内存。
VmRSS(虚拟内存驻留集大小)指示现在有多少进程内存(所有 VM 内存)位于物理内存中。因此,如果您的进程使用内存,它会转到物理内存并且其大小会增加,这是很正常的。
VmRSS 是衡量已用内存的不准确指标。请参阅 Linux 手册页 - proc_pid_status
VmRSS 驻留集大小。 请注意,此处的值是 RssAnon、RssFile 和 RssShmem 的总和。该值不准确;请参阅上面的 /proc/pid/statm。
(为了提供更精准的推荐,最好看看你如何使用
cv::findChessboardCornersSB
和管理内存)。