0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

内存泄漏的特点和类型

如意 来源:CSDN 作者:Owenlzy126 2020-06-20 10:58 次阅读

在计算机科学中,内存泄漏(memory leak)指由于疏忽或错误使程序未能释放而造成不能再使用的内存的情况。内存泄漏并非指内存在物理上的消失,而是应用程序分配某段内存后,由于设计错误,失去了对该段内存的控制,因而造成了内存的浪费。内存泄漏与许多其他问题有着相似的症状,并且通常情况下只能由那些可以获得程序源代码的程序员才可以分析出来。然而,有不少人习惯于把任何不需要的内存使用的增加描述为内存泄漏,严格意义上来说这是不准确的。

一般我们常说的内存泄漏是指堆内存的泄漏。堆内存是指程序从堆中分配的,大小任意的(内存块的大小可以在程序运行期决定),使用完后必须显式释放的内存。应用程序一般使用malloc,calloc,realloc等函数(C++中使用new操作符)从堆中分配到一块内存,使用完后,程序必须负责相应的调用free或delete释放该内存块,否则,这块内存就不能被再次使用,我们就说这块内存泄漏了。

常见内存泄漏:

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

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

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

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

如果一个程序存在内存泄漏并且它的内存使用量稳定增长,通常不会有很快的症状。每个物理系统都有一个较大的内存量,如果内存泄漏没有被中止(比如重启造成泄漏的程序)的话,它迟早会造成问题。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 内存
    +关注

    关注

    8

    文章

    3016

    浏览量

    73989
  • 内存泄漏
    +关注

    关注

    0

    文章

    39

    浏览量

    9211
收藏 人收藏

    评论

    相关推荐

    虚拟内存溢出该怎么处理 虚拟内存在服务器中的应用

    、虚拟内存溢出的原因 内存泄漏 :程序中未正确释放的内存会导致内存泄漏,随着时间的推移,这些
    的头像 发表于 12-04 09:49 128次阅读

    不同类型的RAM内存对比

    在计算机系统中,RAM(随机存取存储器)是至关重要的组件,它负责存储临时数据和程序,以便CPU可以快速访问。随着技术的发展,市场上出现了多种类型的RAM内存,每种都有其特定的用途和性能特点。以下
    的头像 发表于 11-11 09:47 532次阅读

    MOS管泄漏电流的类型和产生原因

    MOS管(金属氧化物半导体场效应晶体管)的泄漏电流是指在MOS管关断状态下,从源极或漏极到衬底之间仍然存在的微弱电流。这些泄漏电流可能对电路的性能和稳定性产生不利影响,因此需要深入了解其类型和产生原因。
    的头像 发表于 10-10 15:11 1510次阅读

    简述内存的接口类型

    内存的接口类型多种多样,这些接口不仅决定了内存与主板之间的连接方式,还影响了内存的传输速度和稳定性。
    的头像 发表于 09-10 14:24 2023次阅读

    反射内存卡的优势与特点

    特点1.高速数据传输:‌反射内存卡能够实现极高的数据传输速度,‌这是其最显著的特点之一。‌数据传输速度可达到微秒级或百纳秒级,‌大大提升了数据处理的实时性。‌这种高速传输能力使得反射内存
    的头像 发表于 09-05 16:28 311次阅读
    反射<b class='flag-5'>内存</b>卡的优势与<b class='flag-5'>特点</b>

    如何检测内存泄漏

    检测内存泄漏是软件开发过程中一项至关重要的任务,它有助于识别和解决那些导致程序占用过多内存资源,从而影响程序性能甚至导致程序崩溃的问题。以下将详细阐述几种常见的内存
    的头像 发表于 07-30 11:50 1762次阅读

    NONOS 1.5.3/1.5.4 SSL内存泄漏的原因?

    我已经通过随附的代码验证了当发生 SSL 握手错误时,会生成内存泄漏 此外,espconn_reconnect_callback不称为信令ESPCONN_HANDSHAKE - TCP SSL 握手
    发表于 07-18 07:24

    内存的种类都有哪些?有什么区别?

    内存,作为计算机中不可或缺的组成部分,承担着存储和交换数据的重要任务。随着技术的不断发展,内存的种类也日益丰富,每种类型都有其独特的特点和适用场景。以下是对
    的头像 发表于 07-15 18:15 1.1w次阅读

    内存容量与类型如何影响计算机性能

    内存的容量与类型作为计算机硬件系统中的重要组成部分,对计算机的整体性能有着至关重要的影响。它们不仅决定了系统能够同时处理的数据量大小,还影响着程序的运行速度、系统的响应能力以及多任务处理的效率。下面,我们将从多个维度深入探讨内存
    的头像 发表于 07-15 18:05 2049次阅读

    使用system_show_malloc()检查内存泄漏遇到异常怎么解决?

    我想使用system_show_malloc()检查内存泄漏,但是当我调用该函数时,我得到了致命的异常: 致命异常 28 (LoadProhibitedCause): epc1
    发表于 07-10 06:32

    plc有几种输出类型各有什么特点

    可编程逻辑控制器(PLC)是一种用于自动化控制的电子设备,广泛应用于工业生产、建筑自动化、交通控制等领域。PLC具有灵活的编程能力、强大的数据处理能力、高度的可靠性和稳定性等特点。PLC的输出类型
    的头像 发表于 07-01 09:52 4514次阅读

    电池的常见类型及其特点

    电池,作为现代社会中不可或缺的能源供应设备,广泛应用于各个领域,从便携式电子设备到大型工业设备,甚至包括新能源汽车等。随着科技的进步,电池的种类也日益增多,每种电池都有其独特的特点和应用场景。本文将详细介绍几种常见的电池类型及其特点
    的头像 发表于 05-21 16:41 5203次阅读

    C语言内存泄漏问题原理

    内存泄漏问题只有在使用堆内存的时候才会出现,栈内存不存在内存泄漏问题,因为栈
    发表于 03-19 11:38 518次阅读
    C语言<b class='flag-5'>内存</b><b class='flag-5'>泄漏</b>问题原理

    【鸿蒙】webview内存泄漏问题的分析报告

    1 关键字 webview;内存泄漏 2 问题描述 问题现象:在 3.1release 版本和 3.2bete1 版本中,在 RK3568 上使用 etsWeb 和其他浏览器时,webview 所占
    的头像 发表于 03-02 15:12 2137次阅读

    内存溢出与内存泄漏:定义、区别与解决方案

    内存溢出与内存泄漏:定义、区别与解决方案  内存溢出和内存泄漏是计算机科学中常见的问题,在开发和
    的头像 发表于 12-19 14:10 2700次阅读