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

    文章

    3128

    浏览量

    75363
  • 内存泄漏
    +关注

    关注

    0

    文章

    40

    浏览量

    9413
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    变压器常见类型特点详解

    变压器在电力系统中起着重要的作用,根据不同的标准,变压器可以划分为多种类型。以下是对变压器主要类型及其特点的详细阐述:
    的头像 发表于 08-02 13:37 ?125次阅读

    在OpenVINO? C++代码中启用 AddressSanitizer 时的内存泄漏怎么解决?

    在 OpenVINO? C++代码中启用 AddressSanitizer 时遇到内存泄漏: \"#0 0xaaaab8558370 in operator new(unsigned
    发表于 06-23 07:16

    快速搞懂C语言程序内存分区!

    在程序运行过程中,操作系统会根据程序的需要,将内存划分为多个功能不同的区段,以便更高效地管理内存资源和确保程序的稳定运行。不同的内存区段负责存储不同类型的数据和代码,涵盖了从程序指令、
    的头像 发表于 03-14 17:37 ?748次阅读
    快速搞懂C语言程序<b class='flag-5'>内存</b>分区!

    使用OpenVINO?进行推理时的内存泄漏怎么解决?

    使用 OpenVINO? 进行推理时,内存会随着时间的推移而增加,并导致程序崩溃。
    发表于 03-06 08:29

    内存泄漏检测工具Sanitizer介绍

    内存泄漏,我们经常会遇到,如何检测内存泄漏,除了我们之前讲过的 valgrind,还可以使用 gcc 自带的工具 sanitizer。
    的头像 发表于 03-01 14:52 ?791次阅读

    常见阻尼器类型及其特点

    阻尼器是一种提供运动阻力、耗减运动能量的装置,广泛应用于航天、航空、军工、枪炮、汽车、建筑、桥梁等领域。以下是常见阻尼器类型及其特点: 一、液压阻尼器 工作原理 :利用液体的流动来吸收能量。通过液体
    的头像 发表于 02-13 14:50 ?2494次阅读

    EE-32:语言扩展:内存存储类型、ASM和内联构造

    电子发烧友网站提供《EE-32:语言扩展:内存存储类型、ASM和内联构造.pdf》资料免费下载
    发表于 01-14 15:03 ?0次下载
    EE-32:语言扩展:<b class='flag-5'>内存</b>存储<b class='flag-5'>类型</b>、ASM和内联构造

    舵机的类型及其特点

    舵机,也称为伺服电机,是一种能够将输入信号转换为精确角度或位置输出的电机。它们广泛应用于机器人、遥控模型、自动化设备等领域。 舵机的类型及其特点 1. 直流舵机(DC Servo Motor) 特点
    的头像 发表于 01-08 17:41 ?2688次阅读

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

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

    不同类型的RAM内存对比

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

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

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

    简述内存的接口类型

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

    反射内存卡的优势与特点

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

    bnc公头板端类型特点

     德索工程师说道BNC公头板端类型及其特点,可以从多个方面进行详细阐述。以下是对这一主题的全面分析:   BNC公头板端类型多样,主要根据连接形式、应用场景和具体需求进行分类。常见的BNC公头
    的头像 发表于 08-30 09:00 ?869次阅读
    bnc公头板端<b class='flag-5'>类型</b>及<b class='flag-5'>特点</b>

    堆栈和内存的基本知识

    本文主要聊聊关于堆栈的内容。包括堆栈和内存的基本知识。常见和堆栈相关的 bug,如栈溢出,内存泄漏,堆内存分配失败等。后面介绍软件中堆栈统计的重要性,以及如何使用工具工具软件中堆栈使用
    的头像 发表于 08-29 14:10 ?1082次阅读
    堆栈和<b class='flag-5'>内存</b>的基本知识