内存泄漏也称作“存储渗漏”,用动态存储分配函数动态开辟的空间,在使用完毕后未释放,结果导致一直占据该内存单元。直到程序结束。有人比喻是“操作系统可提供给所有进程的存储空间正在被某个进程榨干”,最终结果是程序运行时间越长,占用存储空间越来越多,最终用尽全部存储空间,整个系统崩溃。
内存溢出导致蓝屏
所以“内存泄漏”是从操作系统的角度来看的。这里的存储空间并不是指物理内存,而是指虚拟内存大小,这个虚拟内存大小取决于磁盘交换区设定的大小。由程序申请的一块内存,如果没有任何一个指针指向它,那么这块内存就泄漏了。那么,遭遇内存又和内存溢出有什么不同?
从用户使用程序的角度来看,内存泄漏本身不会产生什么危害,作为一般的用户,根本感觉不到内存泄漏的存在。真正有危害的是内存泄漏的堆积,这会最终消耗尽系统所有的内存。从这个角度来说,一次性内存泄漏并没有什么危害,因为它不会堆积,而隐式内存泄漏危害性则非常大,因为较之于常发性和偶发性内存泄漏它更难被检测到。
什么是偶发性和常发性内存泄露?
所谓偶发性内存泄露是指,发生内存泄漏的代码只有在某些特定环境或操作过程下才会发生。常发性和偶发性是相对的。对于特定的环境,偶发性的也许就变成了常发性的。所以测试环境和测试方法对检测内存泄漏至关重要。发生内存泄漏的代码会被多次执行到,每次被执行的时候都会导致一块内存泄漏。
内存泄漏的危害
资源耗尽后,系统会反应十分缓慢,因为无法有空闲内存创建新的进程,无法及时响应用户操作,这种症状看起来和系统中病毒有点类似。
内存泄露的危害
用户可以使用专门的内存泄露检测工具来检测是否出现内存泄露。
内存溢出是指程序要求的内存,超出了系统所能分配的范围,从而发生溢出。
内存溢是指在一个域中输入的数据超过它的要求而且没有对此作出处理引发的数据溢出问题,多余的数据就可以作为指令在计算机上运行。通常在运行大型软件或游戏时,软件或游戏所需要的内存远远超出了你主机内安装的内存所承受大小,就叫内存溢出。此时软件或游戏就运行不了,系统会提示内存溢出,有时候会自动关闭软件,重启电脑或者软件后释放掉一部分内存又可以正常运行该软件或游戏一段时间。
总之,内存泄漏是指程序由于错误或漏洞造成的内存占用过多,或占用内存后无法释放。内存溢出则是指已有的数据超过了其获得到的内存所能存储的范围。