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

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

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

    关注

    9

    文章

    3173

    浏览量

    76115
  • 内存泄漏
    +关注

    关注

    0

    文章

    40

    浏览量

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    at_device 包 ml307长时间运行有内存泄漏问题怎么解决?

    使用 at_device 包中的 ml307 包长时间运行有大量内存泄漏问题,大概涨了20K,求助解决。
    发表于 09-24 07:41

    变压器常见类型特点详解

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

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

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

    HarmonyOS优化应用内存占用问题性能优化一

    应用开发中,可以使用虚引用(Weak Reference)来避免内存泄漏。通过使用Weak Reference,可以避免循环引用导致的内存泄漏问题,确保对象在不再需要时能够被正确释放
    发表于 05-21 11:27

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

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

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

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

    内存泄漏检测工具Sanitizer介绍

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

    常见阻尼器类型及其特点

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

    使用DevEco Studio高效解决鸿蒙原生应用内存问题

    在鸿蒙原生应用开发过程中,可能由于种种原因导致应用内存未被正常地使用或者归还至操作系统,从而引发内存异常占用、内存泄漏等问题,最终导致应用卡顿甚至崩溃,严重影响用户体验。
    的头像 发表于 01-16 14:44 1159次阅读

    如何使用DevEco Studio性能调优工具Profiler定位应用内存问题

    鸿蒙应用开发过程中,可能由于种种原因导致应用内存未被正的使用或者归还至操作系统,从而引发内存异常占用、内存泄漏等问题,最终导致应用卡顿甚至崩溃,严重影响用户体验。
    的头像 发表于 01-16 14:40 2522次阅读
    如何使用DevEco Studio性能调优工具Profiler定位应用<b class='flag-5'>内存</b>问题

    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 3637次阅读

    常见MPU接口类型特点

    微处理器单元(MPU)是计算机系统中的核心组件,负责执行程序指令和处理数据。MPU接口是连接MPU与其他系统组件(如内存、输入/输出设备等)的桥梁。以下是一些常见的MPU接口类型及其特点: 1.
    的头像 发表于 01-08 09:43 1523次阅读

    常见热电偶类型特点

    热电偶是一种温度测量仪器,它利用两种不同金属或合金材料在接触点产生热电势(热电效应)的原理来测量温度。以下是一些常见的热电偶类型及其特点: 1. K型热电偶(铬镍合金) 材料 :由90%镍和10%铬
    的头像 发表于 01-02 09:56 7157次阅读

    常见电子开关类型特点

    电子开关是电子电路中用于控制电流流动的元件,它们可以是机械式的,也可以是固态的。以下是一些常见的电子开关类型及其特点: 1. 机械开关(如按钮、拨动开关) 特点 : 接触电阻 :机械开关在闭合
    的头像 发表于 12-30 14:44 2132次阅读