从事IT工作7年了,说出来恐怕汗颜,一直不知道“内存溢出”这种情况为什么叫“内存溢出”,主要是因为“溢出”这两个字,以前知道内存溢出这种情况是因为对象不回收,一直不回收,死在堆里了,这种情况就叫做内存溢出,但是为什么会叫memory-leak(泄漏),无论是我们翻译成溢出,还是泄漏,它终究应该是从某个地方泄漏出去的,或者说从某个地方溢出出去的,比如,我们可以说水从桶中泄漏出去了,或者说水从水池中溢出了,那么在内存管理中,对象是从哪里泄漏出去的呢???我个人觉得这个答案应该是:函数,或者在java中叫做方法
比如下面这段C++代码
void fun(){
int * list=new int[100];
if(XXX){
return;
}
delete [] list;
}
上面代码,如果走到if中,则直接返回,从此,该方法将从栈中执行完毕,而在该方法栈中创建的list这个对象,存在于堆中,而这个函数执行完毕之后,没有回收list,相当于list从该方法中泄漏出去了,至少我个人是这样理解“泄漏”两个字