1、内存溢位(out of memory)
指程式在申请内存时,没有足够的内存空间供其使用。即要求分配的内存超出了系统能够提供的,所以出现out of memory。比如系统只能存放int的空间,而申请了存放long,于是引起内存溢位。栈溢位:栈满时再做进栈必定产生空间溢位,叫上溢;栈空时再做退栈也产生空间溢位,称为下溢。
引起内存溢位的原因有很多种,常见的有以下几种:
内存中载入的资料量过于庞大;动态分配的内存,使用完后未清空;程式码中存在死循环或循环产生过多重复的物件实体。
2、内存泄漏(memory leak)
由程式申请的一块内存,如果没有指标指向它,那么这块内存就泄漏了。所谓的内存泄漏是从操作系统的角度来看的。这里的储存空间不是实体内存,而是虚拟内存,这个虚拟内存的大小取决于磁盘交换区的设定。如使用(malloc)向系统申请分配内存,而指向这块内存的指标丢失,无法释放(free)。
内存泄漏如果不严重,可以容忍,但也会造成系统内存的浪费,当内存泄漏不断增加时,系统闲置空间越来越小,会导致程式执行速度减慢,甚至系统崩溃等严重后果。
memory leak 最终会导致 out of memory!
相关阅读
动态内存分配介绍
何为计算机的虚拟内存
C程式中常见的与内存相关的错误
迫不得已时使用动态内存分配的注意事项