來了解一下記憶體溢位和記憶體洩漏

OldBoy~發表於2018-01-26

記憶體溢位 out of memory,是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用;比如你申請了10個位元組的空間,但是你在這個空間寫入11或以上位元組的資料,就是溢位 。

記憶體洩露 memory leak,是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體洩露危害可以忽略,但記憶體洩露堆積後果很嚴重,無論多少記憶體,遲早會被佔光。

 

知乎某使用者①

記憶體洩露:用完扔了,沒有歸還。
記憶體溢位:霸佔不屬於你的資源。

 

知乎某使用者②

洩漏就是記憶體申請後,用完沒有釋放,造成可用記憶體越來越少。
溢位指使用者實際的資料長度超過了申請的記憶體空間大小,導致覆蓋了其他正常資料,容易造成程式異常,嚴重的,攻擊者可以以此獲取程式控制權。

 

知乎某使用者③

錢丟了vs錢不夠了

 

知乎某使用者⑤

記憶體溢位:你去買鞋,今天你趕時間,沒時間試。平時你穿42碼的,但是美女導購勸你說 ‘這個款式號碼偏大’,於是你買了1個41碼的。能不能穿?導購漂亮不漂亮?
記憶體洩露:你去買鞋,今天發工資了,你高興,但是昨天你踢球腳扭了還沒消腫。同1個品牌同1個款式,平時你穿42碼的,今天你試了試42碼的,但是穿不進去。你買不買?
 
 
知乎某使用者⑥
記憶體溢位,這個好理解,說明儲存空間不夠大。就像倒水倒多了,從杯子上面溢位了來了一樣。
記憶體洩漏,原理是,使用過的記憶體空間沒有被及時釋放,長時間佔用記憶體,最終導致記憶體空間不足,而出現記憶體溢位。這個也很好理解,所謂的“洩漏”是相對釋放物件來定義的,逃脫了釋放物件的釋放,漏處理了,也就是洩漏。形象一點理解,就是一個大的排放廢水的池子,你用水瓢(相當於釋放物件)瓢水,但是水瓢有個洞,漏了。

相關文章