什么是内存泄漏(内存泄漏有哪些现象)
序
今天做项目的时候发现一个指针变量的输出值总是莫名其妙。最后查出了原因,发现是因为内存泄露!
有些朋友看到这个有点疑惑。内存怎么会泄露?只听说过漏水漏油,没听说过内存泄漏!
内存泄漏几乎是不可避免的,无论是老手还是新手,甚至Windows、Linux等系统软件都或多或少的存在内存泄漏。
所以我还是说:不会用指针就不要用。别让我踩到你埋的地雷!
什么是内存泄漏?
在计算机科学中,内存泄漏是指由于疏忽或错误,程序无法释放不再使用的内存。
内存泄漏不是指内存的物理消失,而是指程序中已经动态分配的堆内存,没有释放或者由于某种原因无法释放,造成系统内存的浪费,导致程序运行速度变慢,甚至系统崩溃的严重后果。
C中内存泄漏的主要原因是程在申请内存后没有及时释放无用的内存空间,甚至消灭了指针,导致这个区域的内存空间根本没有释放出来。
了解内存泄漏的原因,有助于你了解如何处理内存泄漏,即记得释放未使用的内存空间,留着过年用!
内存泄漏的严重后果
如果要说内存泄露的后果,我告诉你,内存泄露会让你仰视可疑人生,尤其是新人,不熟悉指针和内存,自己也不敢用。结果由于“大哥”的自信操作,你真的很难抬头!
由于内存泄漏的累积,最终消耗掉系统的所有内存。所以一次性内存泄漏没有什么危害,因为一次性内存泄漏不会累积。但是,如果遇到隐式内存泄漏,则危害很大,因为意外的内存泄漏比频繁的内存泄漏更难检测。
内存泄漏发生在长时间运行的程序中,影响很大,比如操作系统、后台服务等。内存泄露会导致响应越来越慢,最终卡住。
内存泄露的现象有哪些?
有内存泄漏的代码会被执行很多次,每次执行都会导致内存泄漏,所以当你的程序出现莫名其妙的问题时记得想到这一点。
另外,内存泄漏是偶发性的,有内存泄漏的代码只会执行一次,或者因为算法缺陷,总会有一个且只有一个内存泄漏,也会出现莫名其妙的问题,而且这个问题不会每次都出现,比上述情况更令人费解。
程序在运行过程中不断分配内存,但直到最后才释放内存。严格来说,这里不存在内存泄漏,因为程序最终释放了所有应用的内存。
但是,对于一个程序来说,可能需要几天、几周甚至几个月的时间来运行,如果不能及时释放内存,最终可能会导致系统所有内存的耗尽。因此,我们将这种内存泄漏称为隐式内存泄漏。
如何避免内存泄漏
关于如何避免内存泄漏,我总结了以下几点:
当你在一个函数中看到局部指针时,你应该警惕内存泄漏问题,并养成深入调查的习惯。
内存分配后别忘了用free来释放,alloca函数除外;
确保您自己的程序没有访问空指针;
每次内存分配后要及时进行初始化,除calloc函数外可以结合memset函数;
每当向指针写入一个值时,确保交叉检查可用的字节数和写入的字节数;
在给指针赋值之前,要确保没有内存位置会成为孤儿;
始终正确处理返回动态分配的内存引用的函数的返回值;
标签
因为我是汽车行业的SOC开发者,内存泄露真的很可怕。想想吧。你正在高速行驶,结果你的车载系统因为内存泄漏突然崩溃。想想吧。刹车失灵,方向盘卡住了!
所以汽车行业对内存泄露的要求非常严格,会有人来审查你写的代码。如果申请后不释放内存,你就完了!
审计刘清
推荐阅读
- 萘和对二氯苯用什么可除掉?(对二氯苯怎么去除)
- 美的空调舒睡1,2什么区别_rn02s/BG如何设置睡眠
- 樊振东教练是谁2020,樊振东教练是谁
- 到2033年全球移动电动汽车充电器市场规模将增长至24亿美元
- 起亚公布了新款起亚EV3的全部细节
- VALVOLINE全球运营部门和阿斯顿马丁阿美一级方程式车队携手在摩纳哥大奖赛上展示原创性
- 2021年下半年普通话考试报名(2021上半年普通话水平测试时间)
- 怎么样才能把身份证正反面放在同一张图片上,如何将身份证正反面放在同一张图片内
- IBPS文员招聘2024超过6000个职位的申请窗口已开始
- SAT 2024资格申请费和考试模式
- 索爱W595(索爱w595c)
- UPSC CSE初试成绩2024已发布
- 逃离印度季风季节前往这五个目的地
- 准备去下一个夏季旅行吗难忘旅程的秘诀
- 电信座机呼叫转移到手机上,电信座机呼叫转移到手机
- 马哈拉施特拉邦4处隐秘的宝石度假村为您带来完美的雨天度假体验
- vivoy55怎样使用sd卡,vivoy55a怎么用sd卡
- 智能网联汽车总结,智能网联汽车周报(10月第一、二周)
- ICMR呼吁重新考虑饮食习惯遵循以下健康饮食建议
- 5种矿物质可减轻压力并调节皮质醇水平