范文健康探索娱乐情感热点
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

什么是内存泄露内存泄漏的原因是什么详解

  摘要:内存泄露是什么意思?内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏的原因是什么?
  【内存泄露】内存泄露是什么意思 内存泄漏的原因是什么
  内存泄露是什么意思
  内存泄漏(   Memory Leak  )是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。
  内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为 内存 泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。
  随着计算机应用需求的日益增加,应用程序的设计与开发也相应的日趋复杂,开发人员在程序实现的过程中处理的变量也大量增加,如何有效进行内存分配和释放,防止内存泄漏的问题变得越来越突出。例如服务器应用软件,需要长时间的运行,不断的处理由客户端发来的请求,如果没有有效的内存管理,每处理一次请求信息就有一定的内存泄漏。这样不仅影响到服务器的性能,还可能造成整个系统的崩溃。因此,内存管理成为软件设计开发人员在设计中考虑的主要方面。
  内存泄漏的原因是什么
  在   C  语言中,从变量存在的时间生命周期角度上,把变量分为静态存储变量和动态存储变量两类。静态存储变量是指在程序运行期间分配了固定存储空间的变量而动态存储变量是指在程序运行期间根据实际需要进行动态地分配存储空间的变量。在内存中供用户使用的内存空间分为三部分:
  程序存储区
  静态存储区
  动态存储区
  程序中所用的数据分别存放在静态存储区和动态存储区中。静态存储区数据在程序的开始就分配好内存区,在整个程序执行过程中它们所占的存储单元是固定的,在程序结束时就释放,因此静态存储区数据一般为全局变量。动态存储区数据则是在程序执行过程中根据需要动态分配和动态释放的存储单元,动态存储区数据有三类函数形参变量、局部变量和函数调用时的现场保护与返回地址。由于动态存储变量可以根据函数调用的需要,动态地分配和释放存储空间,大大提高了内存的使用效率,使得动态存储变量在程序中被广泛使用。
  开发人员进行程序开发的过程使用动态存储变量时,不可避免地面对内存管理的问题。程序中动态分配的存储空间,在程序执行完毕后需要进行释放。没有释放动态分配的存储空间而造成内存泄漏,是使用动态存储变量的主要问题。一般情况下,开发人员使用系统提供的内存管理基本函数,如   malloc  、    recalloc    、    calloc    、    free    等,完成动态存储变量存储空间的分配和释放。但是,当开发程序中使用动态存储变量较多和频繁使用函数调用时,就会经常发生内存管理错误,例如:
  分配一个内存块并使用其中未经初始化的内容;
  释放一个内存块,但继续引用其中的内容;
  子函数中分配的内存空间在主函数出现异常中断时、或主函数对子函数返回的信息使用结束时,没有对分配的内存进行释放;
  程序实现过程中分配的临时内存在程序结束时,没有释放临时内存。内存错误一般是不可再现的,开发人员不易在程序调试和测试阶段发现,即使花费了很多精力和时间,也无法彻底消除。
  产生方式的分类
  以产生的方式来分类,内存泄漏可以分为四类:
  1  、   常发性内存泄漏
  发生内存泄漏的代码会被多次执行到,每次被执行时都会导致一块内存泄漏。
  2  、   偶发性内存泄漏
  发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。
  3  、   一次性内存泄漏
  发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅有一块内存发生泄漏。
  4  、   隐式内存泄漏
  程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放 内存 也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。

三星GalaxyC9Pro和vivoX9Plus哪个好三星GalaxyC9Pro和vivoX9Plus哪个好三星GalaxyC9Pro前后摄像头都是1600万像素,拥有F1。9的大光圈。此外,该机的前置镜头还采用了三星最新的light三星GalaxyC9Pro和魅族PRO6Plus哪个好三星GalaxyC9Pro和魅族PRO6Plus哪个好三星GalaxyC9Pro采用6英寸的全高清SuperAMOLED屏幕,分辨率为1080x1920,屏幕超窄边框设计,覆盖2。三星GalaxyC9Pro和华为Mate9Pro哪个好三星GalaxyC9Pro和华为Mate9Pro哪个好三星GalaxyC9Pro运行的基于android6。0。1深度定制的三星系统。三星GalaxyC9Pro支持DualCame华为Mate8和三星S6Edge哪个好华为Mate8和三星S6Edge哪个好华为Mate8前置800万像素的摄像头,而后置的为1600万像素,采用了来自索尼公司的IMX298堆栈式传感器,拥有F2。0的大光圈保证通光亮华为Mate9和魅族PRO5哪个好华为Mate9和魅族PRO5哪个好华为Mate9搭载1200万彩色2000万黑白镜头,支持光学防抖及4合一混合对焦,据称对焦速度比第一代徕卡提升30其他性能指标还包括,大光圈模式2华为mate9pro和mate9哪个好华为mate9pro和mate9区别对比近几日华为发布了一款新的机型华为mate9让很多人感概都非常的不错,可是很犹豫不知道应该下手华为mate9还是等待华为mate9pro开售购买华为mate9pro,华为mate9p三星GalaxyC7Pro和苹果iPhoneSE哪个好三星GalaxyC7Pro和苹果iPhoneSE哪个好三星GalaxyC7Pro独具创新的采用了三天线设计,机身正面配备一块5。7英寸1080pSuperAMOLED显示屏,支持A三星GalaxyC7Pro和苹果iPhoneSE选哪个图文介绍手机操作系统是很多人买手机都是着重挑选的一个参考,有些人喜欢iOS,有些人喜欢安卓。而在预算不够的情况下,三星GalaxyC7Pro和苹果iPhoneSE都是不错的选择。那么,三星三星s8和iphone7哪个好三星s8和苹果7区别详解三星s8和iphone7哪个好?三星s8将在今天晚上正式发布,三星s8作为2017年的第一大旗舰机型,受关注的程度自然非常火爆,而且从各种曝光照来看,超高的占屏比也是让s8的颜值非苹果和华为哪个好华为Mate9和iPhone7Plus哪个更好用图文苹果和华为这两个手机品牌可以说是最近用户的两大宠儿,苹果主要针对一些高消费人群,而华为主要是针对一些中低消费的人群。苹果受到许多用户的认可,这也不是新闻,因为这几年来苹果手机的销量三星GalaxyS8和苹果iPhone7哪个好三星GalaxyS8和苹果iPhone7哪个好三星GalaxyS8配置了5。8英寸屏幕,分辨率达到2960x1440,屏幕材质是Amoled,三围为148。9x68。1x8mm,重
摩托罗拉戴妃me525如何刷机方法步骤随着手机逐步的成为人们日常生活工作以及学习中最重要的工具之后,在市场上,越来越多的手机品牌出现在了人们的视线之中。在这些众多的手机品牌中,有一个手机品牌可谓是家喻户晓mdashmd摩托罗拉mt680怎么刷机摩托罗拉mt680刷机教程现如今我们身边的智能手机是越来越多了,无论品牌还是种类,光是记就很头疼了,更不要说给智能手机刷机了。今天小编要说的既是摩托罗拉mt680的刷机教程,摩托罗拉mt680刷机都是有那些摩托罗拉e6评测分析图文提到摩托罗拉,很多人可能都使用过摩托罗拉品牌的手机,这个成立于1928年的品牌,在电子通讯手机制造软件开发等方面,都有着非常不错的成绩。今天,小兔要给大家介绍摩托罗拉一款比较经典的摩托罗拉edge轻奢版支持无线充电吗有无线充电功能吗摩托罗拉edge的机身采用了高分子聚合材料,是摩托罗拉有史以来最为轻盈的5G手机,同时也是目前市面上最轻的5G手机之一。那么摩托罗拉edge轻奢版支持无线充电吗?今天就跟着小编一起e6空调故障怎么处理e6空调故障解决方法详解夏天过高的温度总是让人感觉不适,尤其是在办公室办公的人群,如果他们的空调在炎热的一天停止工作,人们很容易感到沮丧。那么,e6空调故障代码是什么意思?e6空调故障怎么处理?今天小编整摩托罗拉edgex电池多少充电速度多少摩托罗拉edgex这款手机为用户提供很好的手机颜值,可以为用户提供很好的手机骁龙898的处理器,带来很好的手机性能体验,那么这款手机的充电速度多少?电池多少?这里小编为大家带来最新iQOONeo6SE支持快充吗充电速率多少WiQOONeo6SE可是一款可以为小伙伴们带来稳定性能体验感受的手机哦,绝对是可以让小伙伴们随意畅玩,那么在这款手机中除了是有着不错的性能外是否是有着出色的充电速率呢?现在就有小编vivos10e怎么设置充电特效充电特效设置方法vivos10e是一款可以为小伙伴们带来不错视觉感受的摄像手机,今天IT百科就带大家了解一下vivos10e怎么设置充电特效,感兴趣的一起看看吧。vivos10e怎么设置充电特效1魅族18SPro支持wifi6e吗可以连接wifi6e吗魅族18SPro搭载4500毫安的电池容量,带来40w的手机充电速度,给用户提供非常不错的续航体验,那么魅族18SPro支持wifi6e吗?今天IT百科就带大家一起全面了解一下吧。索尼t50怎么样?索尼t50参数配置如何索尼在数码相机生产上一直非常有优势,因为它生产相机已经有很多年,累积了丰富的经验,又不断的改进相机的生产技术,推出新款实用的数码相机,引起大众的关注。索尼数码相机向来都有时尚轻薄的索尼T77怎么样索尼T77体积为93。6mmx57。2mmx15。0mm,最薄处(除去保护盖)的厚度仅为13。9mm,是索尼带光学防抖镜头的卡片数码相机中最薄的。机身采用金属材质打造,加上索尼一贯