引入OpenCV导致私有内存巨大
引入OpenCV导致私有内存巨大
说明
在调试程序的时候 发现自己的程序在VS的调试窗口占用很高,
花时间关注了一下这个问题, 手动写了小的程序复现这个问题,最终确定了占用巨大的问题.
VS的调试工具表示的内存占用是统计的程序 私有字节 的大小, 而任务管理器统计的内存占用是程序的 工作集 大小,具体二者的内存的区别可以参考问题 Virtual Size causing program to run out of memory 的答案,
- Private bytes tells you how many bytes of virtual device memory your process has mapped, excluding virtual memory shared with other processes (e.g. mapped files, global heap, etc).
- Working set tells you how many bytes of physical memory you are actively using. This includes physical memory, device buffers, and mapped files. It's a pretty strange figure, since it equates to touched physical memory + mapped virtual non-system memory. In general, you should completely ignore this figure. It's practically useless for debugging memory leaks.
- Virtual bytes is the total amount of virtual memory you have mapped.
解决
通过不断的重复和二分, 最终确定了是 OpenCV引入的头文件问题, 在我们平时写OpenCV的程序的时候, 总是简单的使用 #include <opencv.hpp> 引入一个头文件来解决问题, 也是官方推荐的写法, 十分方便,
但是巨大, 我们分别使用三种方式测试, 分别是
不引入 Opencv 头文件, WorkingSet: 31,636 KB, PrivateByte: 6,224 KB ; VS: 7 MB

引入 一个 Opencv.hpp 头文件, WorkingSet: 49,012 KB, PrivateByte: 999,068 KB VS:1 GB

引入 一个 Opencv.hpp 头文件, WorkingSet: 31,700 KB, PrivateByte: 6,252 KB VS:7 MB

查看 opencv.hpp 文件里面的内容 最终通过二分排查, 确定了 只要引用 opencv2/dnn.hpp 之后,占用巨大, 本项目中不会用到这个头文件所以,这里可以不加入即可,问题解决!!
// #include "opencv2/opencv_modules.hpp"
//#include "opencv2/calib3d.hpp"
//#include "opencv2/features2d.hpp"
#include "opencv2/dnn.hpp" // 最终确定占用巨大
//#include "opencv2/flann.hpp"
//#include "opencv2/highgui.hpp"
//#include "opencv2/imgcodecs.hpp"
//#include "opencv2/imgproc.hpp"
//#include "opencv2/ml.hpp"
//#include "opencv2/objdetect.hpp"
//#include "opencv2/photo.hpp"
//#include "opencv2/shape.hpp"
//#include "opencv2/stitching.hpp"
//#include "opencv2/superres.hpp"
//#include "opencv2/video.hpp"
//#include "opencv2/videoio.hpp"
//#include "opencv2/videostab.hpp"
更多
图中程序部分是 VS2015 , 右侧进程管理查看软件是 ProcessExplorer_v16.21 可以查看进程的各种细节
参考链接
无
引入OpenCV导致私有内存巨大的更多相关文章
- SQL Server 内存泄露(memory leak)——游标导致的内存问题
原文:SQL Server 内存泄露(memory leak)--游标导致的内存问题 转自:http://blogs.msdn.com/b/apgcdsd/archive/2011/07/01/sql ...
- 精华阅读第 13 期 |常见的八种导致 APP 内存泄漏的问题
本期是移动开发精英俱乐部的第13期文章,都是以技术为主,所以这里就不过多的进行赘述了,我们直接看干货内容吧!本文系ITOM管理平台OneAPM整理. 实际项目中的MVVM(积木)模式–序章 导读:开篇 ...
- 在Activity中使用Thread导致的内存泄漏
https://github.com/bboyfeiyu/android-tech-frontier/tree/master/issue-7/%E5%9C%A8Activity%E4%B8%AD%E4 ...
- JavaScript之详述闭包导致的内存泄露
一.内存泄露 1. 定义:一块被分配的内存既不能使用,也不能回收.从而影响性能,甚至导致程序崩溃. 2. 起因:JavaScript的垃圾自动回收机制会按一定的策略找出那些不再继续使用的变量,释放其占 ...
- dotnet 6 在 Win7 系统证书链错误导致 HttpWebRequest 内存泄露
本文记录我将应用迁移到 dotnet 6 之后,在 Win7 系统上,因为使用 HttpWebRequest 访问一个本地服务,此本地服务开启 https 且证书链在此 Win7 系统上错误,导致应用 ...
- 解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题
下面两种现象,用同一种方法解决 1.解决MWPhotoBrowser中的SDWebImage加载大图导致的内存警告问题 2.突然有一天首页访问图片很慢,至少隔20多秒所有图片才会出来.(解析:app使 ...
- Win3内存管理之私有内存跟共享内存的申请与释放
Win3内存管理之私有内存跟共享内存的申请与释放 一丶内存简介私有内存申请 通过上一篇文章.我们理解了虚拟内存与物理内存的区别. 那么我们有API事专门申请虚拟内存与物理内存的. 有私有内存跟共享内存 ...
- 使用block的时候,导致的内存泄漏
明确,只要在block里边用到我们自己的东西,成员变量,self之类的,我们都需要将其拿出来,把它做成弱指针以便之后进行释放. 在ZPShareViewController这个控制器中,由如下代码: ...
- iOS - Block产生Memory Leaks循环引用导致的内存泄漏以及解决方案
在ARC(自动引用技术)前,Objective-c都是手动来分配释放 释放 计数内存,其过程非常复杂. ARC技术推出后,貌似世界和平了很多,但是其实ARC并不等同于Java或者C#中的垃圾回收,AR ...
随机推荐
- A 皮呵德
时间限制 : 5000 MS 空间限制 : 262144 KB 问题描述 Eyiz正在与邪恶的Dgdon战斗. 为了打败Dgdon,Eyiz决定召唤PhantasmDragon来帮助他. 但是,召 ...
- Python魔法缓存,以数字开始
Python魔法缓存,以数字开始 众所周知,Python是弱类型的脚本语言,变量的定义是不用声明类型的. a = 1 Python所有数字的本质都是对象, 他们是不可改变的数据类型,这意味着改变数字数 ...
- 剑指offer—单链表反转的三种实现方法
单链表的反转可以用递归.非递归和栈的方法实现 链表节点定义: struct ListNode{ int val; Node* next; ListNode(int x):val(x),next(nul ...
- Python循环语句,对象
Python循环语句,对象 案例1:斐波那契数列 案例2:模拟cp操作 案例3:生成8位随机密码 1 案例1:斐波那契数列 1.1 问题 编写fib.py脚本,主要要求如下: 输出具有10个数字的斐波 ...
- Vulnhub FristiLeaks靶机渗透
VM上配置 VMware users will need to manually edit the VM's MAC address to: 08:00:27:A5:A6:76 VM上选择本靶机,编辑 ...
- 批处理 bat 查询局域网内在线电脑IP
查看自己局域网的IP和物理网卡地址可以在 WIN+R –> 打开cmd 键入 arp -a 可以看到局域网中所有的在线IP COLOR 0A CLS @ECHO Off Title 查询局域网内 ...
- C#多线程系列(1):Thread
目录 1,获取当前线程信息 2,管理线程状态 2.1 启动与参数传递 2.1.1 ParameterizedThreadStart 2.1.2 使用静态变量或类成员变量 2.1.3 委托与Lambda ...
- python3中的nonlocal 与 global
nonlocal 与 global nonlocal翻译是非本地,global翻译是全局,它们都是python3的新特性.如果以类C语言的思维去看这2个关键字,很可能觉得它们差不多.但实际上它们很不一 ...
- Linux C++ 网络编程学习系列(1)——端口复用实现
Linux C++ 网络编程学习系列(1)--端口复用实现 源码地址:https://github.com/whuwzp/linuxc/tree/master/portreuse 源码说明: serv ...
- push和appendChild的区别
概述:绑定事件(push和appendChild用法相似:但是一个是控制数组,一个是控制元素节点)用法:1.数组1的更改后的长度 = 数组1.push();//用来控制数组,在数组最后面插入项,返回数 ...


