什么是内存泄漏(内存泄漏有哪些现象)
序
今天做项目的时候发现一个指针变量的输出值总是莫名其妙。最后查出了原因,发现是因为内存泄露!
有些朋友看到这个有点疑惑。内存怎么会泄露?只听说过漏水漏油,没听说过内存泄漏!
内存泄漏几乎是不可避免的,无论是老手还是新手,甚至Windows、Linux等系统软件都或多或少的存在内存泄漏。
所以我还是说:不会用指针就不要用。别让我踩到你埋的地雷!
什么是内存泄漏?
在计算机科学中,内存泄漏是指由于疏忽或错误,程序无法释放不再使用的内存。
内存泄漏不是指内存的物理消失,而是指程序中已经动态分配的堆内存,没有释放或者由于某种原因无法释放,造成系统内存的浪费,导致程序运行速度变慢,甚至系统崩溃的严重后果。
C中内存泄漏的主要原因是程在申请内存后没有及时释放无用的内存空间,甚至消灭了指针,导致这个区域的内存空间根本没有释放出来。
了解内存泄漏的原因,有助于你了解如何处理内存泄漏,即记得释放未使用的内存空间,留着过年用!
内存泄漏的严重后果
如果要说内存泄露的后果,我告诉你,内存泄露会让你仰视可疑人生,尤其是新人,不熟悉指针和内存,自己也不敢用。结果由于“大哥”的自信操作,你真的很难抬头!
由于内存泄漏的累积,最终消耗掉系统的所有内存。所以一次性内存泄漏没有什么危害,因为一次性内存泄漏不会累积。但是,如果遇到隐式内存泄漏,则危害很大,因为意外的内存泄漏比频繁的内存泄漏更难检测。
内存泄漏发生在长时间运行的程序中,影响很大,比如操作系统、后台服务等。内存泄露会导致响应越来越慢,最终卡住。
内存泄露的现象有哪些?
有内存泄漏的代码会被执行很多次,每次执行都会导致内存泄漏,所以当你的程序出现莫名其妙的问题时记得想到这一点。
另外,内存泄漏是偶发性的,有内存泄漏的代码只会执行一次,或者因为算法缺陷,总会有一个且只有一个内存泄漏,也会出现莫名其妙的问题,而且这个问题不会每次都出现,比上述情况更令人费解。
程序在运行过程中不断分配内存,但直到最后才释放内存。严格来说,这里不存在内存泄漏,因为程序最终释放了所有应用的内存。
但是,对于一个程序来说,可能需要几天、几周甚至几个月的时间来运行,如果不能及时释放内存,最终可能会导致系统所有内存的耗尽。因此,我们将这种内存泄漏称为隐式内存泄漏。
如何避免内存泄漏
关于如何避免内存泄漏,我总结了以下几点:
当你在一个函数中看到局部指针时,你应该警惕内存泄漏问题,并养成深入调查的习惯。
内存分配后别忘了用free来释放,alloca函数除外;
确保您自己的程序没有访问空指针;
每次内存分配后要及时进行初始化,除calloc函数外可以结合memset函数;
每当向指针写入一个值时,确保交叉检查可用的字节数和写入的字节数;
在给指针赋值之前,要确保没有内存位置会成为孤儿;
始终正确处理返回动态分配的内存引用的函数的返回值;
标签
因为我是汽车行业的SOC开发者,内存泄露真的很可怕。想想吧。你正在高速行驶,结果你的车载系统因为内存泄漏突然崩溃。想想吧。刹车失灵,方向盘卡住了!
所以汽车行业对内存泄露的要求非常严格,会有人来审查你写的代码。如果申请后不释放内存,你就完了!
审计刘清
推荐阅读
- alfa romeo车标含义?(阿尔法罗密欧车标)
- 华为鸿蒙os如何操作 华为鸿蒙os2.0系统官网报名入口
- 14款沃尔沃s60l二手车能买吗?(沃尔沃s60为什么贬值厉害)
- power mp3 wma converter(mp3格式转换器)软件介绍(power mp3 wma converter(mp3格式转换器))
- 42岁李贞贤宣布平安生女,网友:歌声击退山贼的那个
- 热火朝天的高铁WiFi迟迟未到(5G能否破局)
- 华为手机性价比最高是哪几款2022? 华为哪款手机性价比高最值得入手
- 进口捷豹全部车型报价?(捷豹报价大全价格表)
- 韩庚江铠同疑相恋,两人同游马尔代夫遭曝光
- 八卦格字帖软件介绍(八卦格字帖)
- 虚拟机 操作系统(操作系统整合:虚拟机管理程序的下一步)
- 比亚迪f6参数配置?(比亚迪f6)
- 奥沙利文获世锦冠军,奥沙利文得了几次世锦赛冠军
- Evel Knievel手游游戏介绍(Evel Knievel手游)
- 索尼wi1000x拆解(SONYNZW-X1000系列高清拆解图集)
- 4座硬顶敞篷跑车都有哪几款?(4门4座硬顶敞篷车推荐)
- 艺术体操团体全能决赛,艺术体操团体全能决赛中国
- 工人物语6通用修改器游戏介绍(工人物语6通用修改器)
- 简述电机换向器的工作原理图(简述电机换向器的工作原理)
- Atheros-AR5007EG无线网卡驱动软件介绍(Atheros-AR5007EG无线网卡驱动)