当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 内存溢出与内存泄漏

内存溢出与内存泄漏 时间:2018-09-27      来源:未知

内存溢出(out of memory):当内存空间不足,而又需要更多的内存空间时,会造成内存的溢出,比方说加载大图片到内存,通常会导致内存溢出。栈满时再做进栈必定产生空间溢出,叫上溢,栈空时再做退栈也产生空间溢出,称为下溢。就是分配的内存不足以放下数据项序列,称为内存溢出。

本文引用地址://emb.hqyj.com/Column/7238.html

内存泄漏(memory leak):已经存在的对象,当不再使用时,无法释放掉已经申请的空间,一次或几次的内存泄漏是可以忽略的,但是多次的内存泄漏堆积会造成内存空间的消耗,导致内存溢出,你向系统申请分配内存进行使用(new),可是使用完了以后却不归还(delete),结果你申请到的那块内存你自己也不能再访问(也许你把它的地址给弄丢了),而系统也不能再次将它分配给需要的程序。这就是溢出!

以发生的方式来分类,内存泄漏可以分为4类:

1. 常发性内存泄漏。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。

2. 偶发性内存泄漏。发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

3. 一次性内存泄漏。发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块仅且一块内存发生泄漏。比如,在类的构造函数中分配内存,在析构函数中却没有释放该内存,所以内存泄漏只会发生一次。

4. 隐式内存泄漏。程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。

一般隐式内存泄漏是不容易被检测到的,因为从创建到释放,看似并没没什么纰漏,但是长时间的运行也会导致泄漏,我们可以通过DDMS中的两项功能来检查内存:heap 查看堆的分配情况;allocation tracker跟踪内存分配情况 。

上一篇:C++中的深拷贝与浅拷贝

下一篇:Meteor开发环境的搭建及简单实用

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部