C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1149字,纯文字阅读大概需要2分钟。
内容图文
当我们在用C++做底层驱动的时候,经常会遇到内存不足的警告,究其原因,往往是因为内存出现溢出,泄露或者越界等原因。那么他们之间有什么联系吗?
内存溢出(out of memory)
是指程序在申请内存时,没有足够的内存空间供其使用。
内存泄漏(memory leak)
是指程序在申请内存后,无法释放已申请的内存空间,占用有用内存。
注:内存泄漏最终会导致内存溢出
简单理解,内存溢出就是要求分配的内存超出了系统所给的。内存泄漏是指向系统申请分配内存进行使用(new),但是用完后不归还(delete),导致占用有效内存。
内存泄漏可分为4类:
1.常发性内存泄漏
引起内存泄漏的代码会被很多次执行,每次执行的时候都会导致内存泄漏
2.偶发性内存泄漏
在某些特定的环境下执行引起内存泄漏的代码,才会引起内存泄漏
从以上两种内存泄漏的方式来看,测试环境和测试方法在程序生命周期的重要性是不可或缺的。
3.一次性内存泄漏
代码只会执行一次,但总有一块内存发生泄漏,多见于构造类的时候,析构函数没有释放内存。
4.隐式泄漏
程序运行过程中不断的分配内存,直到结束时才释放内存,但一般服务器程序会运行较长的时间,不及时释放也会导致内存耗尽以至于内存泄漏。
综上所述,一次性内存泄漏对用户的程序维护是没有什么实质性的伤害,但在实际生活中,我们还是尽可能要避免此类的事件发生。
内存越界
附:如果在之前你的程序运行一切正常,但因为你新增了几个类的成员变量或者修改了一部分代码(前提是保证你的这些修改是完全正确的)而导致程序发生错误,则因考虑是否是内存被破坏的原因了,重点排查内存是否越界。
缓冲区溢出(栈溢出)
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/u011318165/article/details/47806245
内容总结
以上是互联网集市为您收集整理的C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系全部内容,希望文章能够帮你解决C++内存机制中内存溢出、内存泄露、内存越界和栈溢出的区别和联系所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。