品牌知名度调研问卷>>

【内存泄露】内存泄露是什么意思 内存泄漏的原因是什么

本文章由注册用户 温暖·生活家 上传提供 评论 发布 纠错/删除 版权声明 0
摘要:内存泄露是什么意思?内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。内存泄漏的原因是什么?

【内存泄露】内存泄露是什么意思 内存泄漏的原因是什么

内存泄露是什么意思

内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃等严重后果。

内存泄漏缺陷具有隐蔽性、积累性的特征,比其他内存非法访问错误更难检测。因为内存泄漏的产生原因是内存块未被释放,属于遗漏型缺陷而不是过错型缺陷。此外,内存泄漏通常不会直接产生可观察的错误症状,而是逐渐积累,降低系统整体性能,极端的情况下可能使系统崩溃。

随着计算机应用需求的日益增加,应用程序的设计与开发也相应的日趋复杂,开发人员在程序实现的过程中处理的变量也大量增加,如何有效进行内存分配和释放,防止内存泄漏的问题变得越来越突出。例如服务器应用软件,需要长时间的运行,不断的处理由客户端发来的请求,如果没有有效的内存管理,每处理一次请求信息就有一定的内存泄漏。这样不仅影响到服务器的性能,还可能造成整个系统的崩溃。因此,内存管理成为软件设计开发人员在设计中考虑的主要方面。

内存泄漏的原因是什么

C语言中,从变量存在的时间生命周期角度上,把变量分为静态存储变量和动态存储变量两类。静态存储变量是指在程序运行期间分配了固定存储空间的变量而动态存储变量是指在程序运行期间根据实际需要进行动态地分配存储空间的变量。在内存中供用户使用的内存空间分为三部分:

程序存储区

静态存储区

动态存储区

程序中所用的数据分别存放在静态存储区和动态存储区中。静态存储区数据在程序的开始就分配好内存区,在整个程序执行过程中它们所占的存储单元是固定的,在程序结束时就释放,因此静态存储区数据一般为全局变量。动态存储区数据则是在程序执行过程中根据需要动态分配和动态释放的存储单元,动态存储区数据有三类函数形参变量、局部变量和函数调用时的现场保护与返回地址。由于动态存储变量可以根据函数调用的需要,动态地分配和释放存储空间,大大提高了内存的使用效率,使得动态存储变量在程序中被广泛使用。

开发人员进行程序开发的过程使用动态存储变量时,不可避免地面对内存管理的问题。程序中动态分配的存储空间,在程序执行完毕后需要进行释放。没有释放动态分配的存储空间而造成内存泄漏,是使用动态存储变量的主要问题。一般情况下,开发人员使用系统提供的内存管理基本函数,如mallocrecalloccallocfree等,完成动态存储变量存储空间的分配和释放。但是,当开发程序中使用动态存储变量较多和频繁使用函数调用时,就会经常发生内存管理错误,例如:

分配一个内存块并使用其中未经初始化的内容;

释放一个内存块,但继续引用其中的内容;

子函数中分配的内存空间在主函数出现异常中断时、或主函数对子函数返回的信息使用结束时,没有对分配的内存进行释放;

程序实现过程中分配的临时内存在程序结束时,没有释放临时内存。内存错误一般是不可再现的,开发人员不易在程序调试和测试阶段发现,即使花费了很多精力和时间,也无法彻底消除。

产生方式的分类

以产生的方式来分类,内存泄漏可以分为四类:

1常发性内存泄漏

发生内存泄漏的代码会被多次执行到,每次被执行时都会导致一块内存泄漏。

2偶发性内存泄漏

发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。

3一次性内存泄漏

发生内存泄漏的代码只会被执行一次,或者由于算法上的缺陷,导致总会有一块且仅有一块内存发生泄漏。

4隐式内存泄漏

程序在运行过程中不停的分配内存,但是直到结束的时候才释放内存。严格的说这里并没有发生内存泄漏,因为最终程序释放了所有申请的内存。但是对于一个服务器程序,需要运行几天,几周甚至几个月,不及时释放内存也可能导致最终耗尽系统的所有内存。所以,我们称这类内存泄漏为隐式内存泄漏。从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。

网站提醒和声明
本站为注册用户提供信息存储空间服务,非“MAIGOO编辑”、“MAIGOO榜单研究员”、“MAIGOO文章编辑员”上传提供的文章/文字均是注册用户自主发布上传,不代表本站观点,版权归原作者所有,如有侵权、虚假信息、错误信息或任何问题,请及时联系我们,我们将在第一时间删除或更正。 申请删除>> 纠错>> 投诉侵权>> 网页上相关信息的知识产权归网站方所有(包括但不限于文字、图片、图表、著作权、商标权、为用户提供的商业信息等),非经许可不得抄袭或使用。
提交说明: 快速提交发布>> 查看提交帮助>> 注册登录>>
最新评论
相关推荐
【高配置电脑选购】如何选择高配置电脑 专业电脑硬件参数推荐
很多人想在有限的台式电脑预算中找出最高效的电脑配置,实现性价比的最大化,其实高配置的电脑的选择还是需要根据个人的需求来定,像对于玩游戏的电脑配置,一般需要看玩家的预算和平时玩什么游戏而定的,每一款游戏都有自身电脑配置要求,大多数的游戏倾向显卡的性能,显卡的性能好坏决定了游戏体验,当然CPU也是主要的,两者做到均衡才是最佳组合。下面这份高配置电脑清单还请各位想买电脑的小伙伴收好了。
电脑 台式电脑 ★★★★
6560 86
内存条的总容量几种 内存条的种类有哪些
内存条是CPU可通过总线寻址,并进行读写操作的电脑部件。挑选电脑的时候,随机存储器(RAM)的容量,是内存条的关键性参数。一般而言,内存容量越大越有利于系统的运行。市面上常见的内存条的总容量几种,包括有64M、128M、256M、512M、1G、2G等。内存条的种类有哪些呢?常见的有SDRAM、DDRAM、RDRAM等三类。
内存条 电脑
3000 2
物理内存占用过高怎么办 解决物理内存占用过高的方法
我们在使用电脑的过程中,经常会出现一些内存占用过高的提示。这是为什么呢?一般来说不是物理内存容量太小就是后台运行的程序过多,那么遇到这种内存占用过高的现象我们要怎么办呢?方法其实很简单,最直接的方法就是增加电脑内存,这样就很少再会出现占用过高的提示。其次,我们还可以通过禁用闲置的IDE通道、优化视觉效果、优化启动和故障恢复等方法来优化。下面一起来看看详细介绍。
内存条 电脑
5381 101
内存不能为Read是什么原因?怎样解决内存不能Read?
电脑不仅是我们工作必备的设备,对于家庭来说也是不能缺少的电器。不过在使用电脑的过程中总是会出现各种各样的问题,比如我们在使用电脑的时候可能会出现内存不能为Read的提示框,这是为什么呢?一般来说可能是驱动不稳定、流氓软件、程序冲突导致。那么我们要如何解决这种问题呢?下面小编为大家带来四种解决方法,快来一起看看吧。
内存溢出的定义和原因 如何解决内存溢出问题
内存溢出通俗理解就是内存不够,通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。此时软件或游戏就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件。那么你知道内存溢出的原因吗?应该如何解决内存溢出的问题呢?下面就和小编一起来看看详细知识吧!
内存条 内存卡
8877 102