翻譯|行業(yè)資訊|編輯:胡濤|2023-09-08 13:35:49.120|閱讀 101 次
概述:本文中,您可以學(xué)習(xí)如何借助運(yùn)行時(shí)錯(cuò)誤檢測工具查找C和C++應(yīng)用程序中的內(nèi)存泄漏~
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
編程軟件中的內(nèi)存泄漏可能很難精確定位,因?yàn)檫@里面有大量的數(shù)據(jù)。本文中,您可以學(xué)習(xí)如何借助運(yùn)行時(shí)錯(cuò)誤檢測工具查找C和C++應(yīng)用程序中的內(nèi)存泄漏。
當(dāng)您面臨內(nèi)存泄漏時(shí),C++和C有一套運(yùn)行時(shí)檢測工具,這些工具有助于提高性能。對(duì)于那些經(jīng)常使用C或C++編寫代碼的人來說,內(nèi)存泄漏已經(jīng)見怪不怪。維基百科中對(duì)于內(nèi)存泄漏的定義如下:
在計(jì)算機(jī)科學(xué)中,內(nèi)存泄漏是一種資源泄漏,當(dāng)計(jì)算機(jī)程序錯(cuò)誤地管理內(nèi)存分配,導(dǎo)致不再需要的內(nèi)存無法釋放時(shí),就會(huì)發(fā)生這種情況。當(dāng)對(duì)象存儲(chǔ)在內(nèi)存中但運(yùn)行的代碼無法訪問時(shí),也可能發(fā)生內(nèi)存泄漏。
以下顯示的運(yùn)行“Hello world”的程序是這種行為的最佳示例之一。
如果我們使用以下參數(shù)執(zhí)行此程序:
如果我們?cè)诘?5行檢查程序的狀態(tài),就在第二次執(zhí)行對(duì)malloc的調(diào)用之前,我們觀察到:
到目前為止,變量字符串指向字符串“hello”,該字符串是上一次循環(huán)迭代的結(jié)果。
變量字符串指向在該循環(huán)迭代中分配的擴(kuò)展字符串“hello-this”。
這些賦值示意圖如下;這兩個(gè)變量都指向動(dòng)態(tài)分配的內(nèi)存塊。
下一句話:
將創(chuàng)建指向較長內(nèi)存塊的兩個(gè)變量,如下所示:
然而,一旦發(fā)生這種情況,就沒有剩余的指針指向較短的塊。即使您愿意,也不可能回收先前由string_so_far指向的內(nèi)存;它現(xiàn)在被永久分配。這被稱為“內(nèi)存泄漏”。C++和C經(jīng)常面臨這些常見問題,因此盡早發(fā)現(xiàn)它們很重要。
雖然沒有“檢測內(nèi)存泄漏”按鈕,但C++和C有運(yùn)行時(shí)檢測工具可以提供幫助。這種類型的錯(cuò)誤可以通過內(nèi)存錯(cuò)誤檢測工具進(jìn)行診斷,如Parasoft Insure++。如下所示:
此示例被稱為LEAK_SSIGN,因?yàn)樗窃谥匦路峙渲羔槙r(shí)引起的。(附言:其他內(nèi)存調(diào)試器通常不會(huì)區(qū)分未處理內(nèi)存和實(shí)際泄漏內(nèi)存,但I(xiàn)nsure++會(huì)區(qū)分。)在這種情況下,未處理內(nèi)存不是優(yōu)質(zhì)的內(nèi)存,而是你沒有釋放的內(nèi)存,與實(shí)際泄漏不同,實(shí)際泄漏是你無法釋放的內(nèi)存。
Parasoft Insure++還可以自動(dòng)檢測其他幾種類型的泄漏。
泄露種類 | 描述 |
LEAK_FREE | 在釋放一個(gè)包含指向其他內(nèi)存塊的指針的內(nèi)存塊時(shí)發(fā)生。 |
LEAK_RETURN | 當(dāng)函數(shù)返回指向已分配內(nèi)存塊的指針,但返回的值在調(diào)用例程中被忽略時(shí)發(fā)生。 |
LEAK_SCOPE | 當(dāng)函數(shù)包含指向內(nèi)存塊的局部變量,但函數(shù)返回時(shí)沒有將指針保存在全局變量中或?qū)⑵鋫鬟f回調(diào)用方時(shí)發(fā)生。 |
請(qǐng)注意,錯(cuò)誤消息指出了問題發(fā)生的確切源行,而不僅僅是塊的分配位置,這是查找和修復(fù)內(nèi)存泄漏的關(guān)鍵問題。這一點(diǎn)非常重要,因?yàn)樵趹?yīng)用程序中引入細(xì)微的內(nèi)存泄漏很容易,但很難全部找到。
了解更多有關(guān)Parasoft產(chǎn)品咨詢,歡迎咨詢
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn