内存泄漏有什么影响

用malloc申请的内存,没有释放,为什么程序也不会出错?
最近有好几位同学提出了这个问题。
讲到c语言指针的时候,我们都会反复强调,malloc申请的堆内存,用完后一定要用free释放掉,否则光申请不释放,内存就会变的越来越少,这种现象就叫做内存泄漏。
泄漏到一定程度,没有内存可用,程序可能就会奔溃。
很多同学在写代码的时候,经常忘记释放内存,比如这段代码:
#include void test(){    chat *s = (char *)malloc(sizeof(char) * 1024 * 1024);}int main(){ test(); return 0;}   
申请了1m堆内存,在程序的任何地方都没有释放。
运行程序后,一切正常,而且即使运行了很多遍,系统也没有问题。
要解释这个问题,就不得不提操作系统的内存管理。
不管是在 linux 还是 windows 下写代码,我们用的内存都是虚拟内存。
以 32 位 linux 为例,每个进程启动的时候,系统都会给他分配4个g的虚拟内存空间,分为用户态和内核态,用户态又分成了堆、栈、数据段、代码段等等。
由于不同的进程使用的虚拟地址空间不同,所以即使程序出现了段错误,也就是进程本身异常退出,并不会影响其他程序的运行。
程序里面用malloc申请的就是堆空间这一段,如果程序一直在运行不会结束,并且一直在申请没有释放,那过一段时间后程序确实会奔溃。
但是我们学习的时候,更多的是一些测试程序,运行一下程序就结束。进程一旦结束,系统就会回收这段虚拟内存空间,对整个系统或者其他程序也不会产生什么影响。
平时写一些测试程序,还是应该养成释放的习惯,放在大型项目中,内存泄漏既有危害又难排查。
最后,给大家留一个问题,申请的堆内存,需要用free来释放,那同一块内存用free释放两次有没有问题?
这个问题在学习的时候也是经常遇到,如果你在linux下做开发,这个现象就是释放两次出现的:
如果往上翻的话,还能看到double free字样,所以,同样的一块堆内存,只能释放一次。


每日一课 | 智慧灯杆中之大数据存储及管理技术
三维扫描技术科技赋能数字孪生变电站
Vivado Design Suite 用户指南介绍
Mapreduce和Hive中map reduce个数设定
医疗一体机如何实现全面互联
内存泄漏有什么影响
体育科技企业FORM推出AR智能泳镜,售价199美元
ADC0832的基本应用方法
AII公布工业数据中心应用案例名单
微小植入型传感器能长期连续地对体内酒精含量进行监测
安科瑞AMC16Z-KA多回路监控装置配电柜用
【洞见芯趋势】退潮后的元宇宙,或许找到了发展密钥
TMS320C32的存储器接口设计
人工智能公司盈利的诀窍在哪里
dfrobotXBee S2C ZigBee无线网络模块简介
打不过苹果、三星、小米、华为_LG全球处境也不容乐观
6G项目开始启动6G是什么6G会不会替代光纤
AI工程师需要懂架构吗?带你详细了解
百度自动驾驶量产计划提前到来,明年7月正式亮相
复杂背景下缺陷检测将Halcon实现转为OpenCV的实例