從事IT工作7年了,說出來恐怕汗顏,一直不知道“內存溢出”這種情況爲什麼叫“內存溢出”,主要是因爲“溢出”這兩個字,以前知道內存溢出這種情況是因爲對象不回收,一直不回收,死在堆裏了,這種情況就叫做內存溢出,但是爲什麼會叫memory-leak(泄漏),無論是我們翻譯成溢出,還是泄漏,它終究應該是從某個地方泄漏出去的,或者說從某個地方溢出出去的,比如,我們可以說水從桶中泄漏出去了,或者說水從水池中溢出了,那麼在內存管理中,對象是從哪裏泄漏出去的呢???我個人覺得這個答案應該是:函數,或者在java中叫做方法
比如下面這段C++代碼
void fun(){
int * list=new int[100];
if(XXX){
return;
}
delete [] list;
}
上面代碼,如果走到if中,則直接返回,從此,該方法將從棧中執行完畢,而在該方法棧中創建的list這個對象,存在於堆中,而這個函數執行完畢之後,沒有回收list,相當於list從該方法中泄漏出去了,至少我個人是這樣理解“泄漏”兩個字