内存泄漏&利用valgrind查找内存泄漏

3 篇文章 0 订阅

内存泄漏

内存泄漏是指未能释放一块不再使用的内存,在程序运行过程中,该内存不再被使用,却没有被释放。由于c/c++本身没有gc机制,要求用户自己申请和释放内存,c/c++程序比较容易产生内存泄漏的问题。

内存泄漏后果

*需要注意的是,内存泄漏虽然是非常严重的问题,但是内存泄漏并不一定产生严重的后果。我们的程序虽然可能存在内存泄漏,但是运行起来一切正常。

1.主流高级操作系统如linux、windows都有内存管理和回收的机制,程序运行结束后,操作系统负责管理和回收程序使用的内存。因此,在程序运行中泄漏的内存在程序结束后会被操作系统回收。

2.内存泄漏主要影响长时间运行的程序(如服务器上部署的服务程序),随着程序运行时间不断增加,内存泄漏导致程序内存不断膨胀,逐渐耗尽系统资源。对于普通程序,如果不是反复申请内存,程序中的内存泄漏通常不会有太明显的现象,而泄漏的内存也随着程序的结束而被操作系统回收。通常,一个内存泄漏的程序,在本地可以正常运行,但是打包成服务部署到服务器上的时候,随着程序运行时间的增加,内存泄漏会导致程序内存不断膨胀。

3.对于某些不能自动回收的操作系统(如某些嵌入式操作系统),程序内存泄漏可能带来严重的问题。

 

valgrind查找内存泄漏

命令格式:valgrind [valgrind-options] your-program [your-program-options]

eg. valgrind --tool=memcheck --leak-check=full --log-file=xx.log your-program [your-program-options]

*为了能够看到内存泄漏发生在代码哪一行,编译时应使用debug模式编译待检查程序。

*对于c++程序而言,由于c++标准库容器等多出使用自己的内存池管理内存,valgrind结果中会存在一部分still reachable,并不属于内存泄漏的问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值