内存不足意味着当程序正在申请内存时,没有足够的内存空间供其使用,并且出现了内存不足的情况。例如,当一个整数被申请,但是可以为它存储一个long时,则是内存溢出。
内存泄漏内存泄漏表示程序在申请内存后无法释放分配的内存空间。内存泄漏的危害可以忽略,但是内存泄漏累积的后果非常严重。无论有多少内存,它迟早都会用完。
内存泄漏最终将导致内存不足!

内存溢出意味着您请求分配的内存超出了系统可以分配给您的内存,并且系统无法满足需求,因此发生了溢出。
内存泄漏是指您向系统申请分配使用的内存(新),但在使用后不将其返回(删除)。结果,您将无法再访问已申请的内存(也许您将其取走了,地址已丢失),并且系统无法再次将其分配给所需的程序。用尽各种方法后,一个盘子只能容纳4个水果。您只能在盘子上装5个水果,当它们掉落到地面上时,您不能再吃它们。这是溢出!例如,当堆栈已满时,将其推入堆栈将不可避免地导致空间溢出,这称为溢出;而当堆栈为空时,将其推回堆栈也会导致空间溢出,这称为下溢。只是分配的内存不足以减少数据项序列,这被称为内存溢出。

按发生的方式分类,内存泄漏可以分为4类:
1.频繁的内存泄漏。具有内存泄漏的代码将被多次执行,并且每次执行都会导致内存泄漏。
2.零星的内存泄漏。具有内存泄漏的代码只能在某些情况或操作下发生。频繁和零星是相对的。对于特定的环境,偶尔可能会变得很频繁。因此,测试环境和测试方法对于检测内存泄漏至关重要。
3.一次内存泄漏。具有内存泄漏的代码将仅执行一次,或者由于算法中的缺陷,将始终存在一个和一个内存泄漏。例如,内存是在类的构造函数中分配的,但内存并未在析构函数中释放,因此内存泄漏只会发生一次。
4.隐式内存泄漏。程序在运行时会不断分配内存,但是直到结束时才释放内存。严格来说,没有内存泄漏,因为最终程序会释放所有请求的内存。但是对于服务器程序,它需要运行几天,几周甚至几个月。无法及时释放内存可能还会导致系统的所有内存最终耗尽。因此,我们将这种类型的内存泄漏称为隐式内存泄漏。
从使用该程序的用户的角度来看,内存泄漏本身不会造成任何危害。作为一般用户,根本没有内存泄漏。真正有害的是内存泄漏的累积,最终将耗尽系统的所有内存。从这个角度来看,一次内存泄漏不会造成危害,因为它不会累积,而隐式内存泄漏则非常有害,因为它比频繁和偶尔的内存泄漏更难检测。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-362131-1.html
一缕温暖
这是赤裸裸的挑衅