搜尋
首頁常見問題內存洩漏和內存溢出的區別是什麼

內存洩漏和內存溢出的區別是什麼

Dec 03, 2020 pm 05:22 PM
內存洩漏記憶體溢出

區別:記憶體溢出是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用, 系統已經不能再分配出你所需要的空間;記憶體外洩是指程式在申請記憶體後,無法釋放已申請的記憶體空間,一次記憶體外洩危害可以忽略,但是記憶體洩漏次數多了就會導致記憶體溢位。

內存洩漏和內存溢出的區別是什麼

本文操作環境:windows7系統、Dell G3電腦。

記憶體溢位(out of memory),是指程式在申請記憶體時,沒有足夠的記憶體空間供其使用,出現out of memory;例如申請了一個integer,但給它存了long才能存下的數,那就是記憶體溢位。

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

memory leak會最終會導致out of memory!

記憶體溢出就是你要求分配的記憶體超出了系統能給你的,系統不能滿足需求,於是產生溢出。

記憶體洩漏是指你向系統申請分配記憶體進行使用(new),可是使用完了以後卻不歸還(delete),結果你申請到的那塊記憶體你自己也不能再存取(也許你把它的地址弄丟了),而係統也不能再次將它分配給需要的程式。一個盤子用盡各種方法只能裝4個果子,你裝了5個,結果掉倒地上不能吃了。這就是溢出!比方說棧,棧滿時再做進棧必產生空間溢出,叫上溢,棧空時再做退棧也產生空間溢出,稱為下溢。就是分配的記憶體不足以放下資料項目序列,稱為記憶體溢出. 

#以發生的方式來分類,記憶體洩漏可以分為4類: 

1、常性記憶體洩漏。發生記憶體洩漏的程式碼會被執行多次,每次執行的時候都會導致一塊記憶體洩漏。 

2、偶發性記憶體洩漏。發生記憶體洩漏的程式碼只有在某些特定環境或操作過程下才會發生。常發性和偶發性是相對的。對於特定的環境,偶發性的也許就變成了常性的。所以測試環境和測試方法對檢測記憶體洩漏至關重要。

3、一次記憶體洩漏。發生記憶體洩漏的程式碼只會被執行一次,或者由於演算法上的缺陷,導致總會有一塊僅且一塊記憶體發生洩漏。例如,在類別的建構函式中分配內存,在析構函式中卻沒有釋放該內存,所以記憶體洩漏只會發生一次。

4、隱含記憶體洩漏。程式在運行過程中不停的分配內存,但是直到結束的時候才釋放內存。嚴格的說這裡並沒有發生記憶體洩漏,因為最終程序釋放了所有申請的記憶體。但是對於一個伺服器程序,需要運行幾天,幾週甚至幾個月,不及時釋放記憶體也可能導致最終耗盡系統的所有記憶體。所以,我們稱這類記憶體洩漏為隱式記憶體洩漏。 

從用戶使用程式的角度來看,記憶體洩漏本身不會產生什麼危害,作為一般的用戶,根本感覺不到記憶體洩漏的存在。真正有危害的是記憶體洩漏的堆積,這最終會消耗盡系統所有的記憶體。從這個角度來說,一次性內存洩漏並沒有什麼危害,因為它不會堆積,而隱式內存洩漏危害性則非常大,因為較之於常發性和偶發性內存洩漏它更難被檢測到

相關免費影片教學推薦:《程式設計影片

以上是內存洩漏和內存溢出的區別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

MantisBT

MantisBT

Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。