c++内存泄露(二):使用性能监视器进行内存泄露的确认

来源:互联网 发布:红帽群排名优化软件 编辑:程序博客网 时间:2024/05/18 08:40

对于服务器程序,在不停的运作中,如何去测试是否存在内存泄露,如果你的开发环境是在windows下,那么我们就可以使用windows自带的性能监视器来观察程序的性能。

使用此例子:

Test.cint main(){while (true){char *test = new char[100];Sleep(100);}cin.get();return 0;}

循环申请堆空间

(1)      开始运行程序test

(2)      打开性能监视器(Performance Monitor)

(3)      使用性能监视器中的数据收集器,进行数据的收集

(4)创建自定义的数据收集,按下图步骤进行配置。

图1 右击用户定义->新建->数据收集器


图2 填写新建项目名称->手动创建->下一步


图3,选择性能计数器->下一步


图4,点击添加->下一步


图5,选择process(进程选项),processor(处理器),这里的选项由需要监听的属性而定,这里暂且监听的是测试程序该进程的相关属性。


图6,选择该进程需要监听的项目 通常需要监听的是:Handle Count(句柄数)、private Bytes(程序拥有的私有字节)、Virtual bytes(虚拟内存)、working set - private (这个值就是任务管理器里面的内存使用量)


图7,选择多长时间记录一次


图8,下一步


图9图10,选择记录数据用制表符进行分隔,为了能用execl进行统计



图11,开启监听

图12 用execl 打开目标目录下的文件



图13,用折线图进行统计



从图中working set-private上升的曲线可以确定此程序存在内存泄露。

当程序遇到内存泄漏,我们应该做的是去定位内存泄漏的位置,并解决它。请看下一章节。


c++内存泄露(一):理解内存泄漏及内存泄漏常见情况

c++内存泄露(三):定位和解决内存泄露