www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > 嵌入式微處理器
[導(dǎo)讀]1.前言 最近部門不同產(chǎn)品接連出現(xiàn)內(nèi)存泄漏導(dǎo)致的網(wǎng)上問題,具體表現(xiàn)為單板在現(xiàn)網(wǎng)運(yùn)行數(shù)月以后,因?yàn)閮?nèi)存耗盡而導(dǎo)致單板復(fù)位現(xiàn)象。 一方面,內(nèi)存泄漏問題屬于低級(jí)錯(cuò)誤,此類問題遺漏到現(xiàn)網(wǎng),影響很壞;另一方面,由于內(nèi)存泄漏問題很可能導(dǎo)致單板運(yùn)行固定時(shí)間以



1.前言

最近部門不同產(chǎn)品接連出現(xiàn)內(nèi)存泄漏導(dǎo)致的網(wǎng)上問題,具體表現(xiàn)為單板在現(xiàn)網(wǎng)運(yùn)行數(shù)月以后,因?yàn)閮?nèi)存耗盡而導(dǎo)致單板復(fù)位現(xiàn)象。

一方面,內(nèi)存泄漏問題屬于低級(jí)錯(cuò)誤,此類問題遺漏到現(xiàn)網(wǎng),影響很壞;另一方面,由于內(nèi)存泄漏問題很可能導(dǎo)致單板運(yùn)行固定時(shí)間以后就復(fù)位,只能通過批量升級(jí)才能解決,實(shí)際影響也很惡劣。

同時(shí),接連出現(xiàn)此類問題,尤其是其中一例問題還是我們老員工修改引入,說明我們不少員工對(duì)內(nèi)存泄漏問題認(rèn)識(shí)還是不夠深刻的。

本文通過介紹內(nèi)存泄漏問題原理及檢視方法,希望后續(xù)能夠從編碼檢視環(huán)節(jié)就杜絕此類問題發(fā)生。

說明:預(yù)防內(nèi)存泄漏問題有多種方法,如加強(qiáng)代碼檢視、工具檢測和內(nèi)存測試等,本文聚集于開發(fā)人員能力提升方面。

2.內(nèi)存泄漏問題原理

2.1堆內(nèi)存在C代碼中的存儲(chǔ)方式

內(nèi)存泄漏問題只有在使用堆內(nèi)存的時(shí)候才會(huì)出現(xiàn),棧內(nèi)存不存在內(nèi)存泄漏問題,因?yàn)闂?nèi)存會(huì)自動(dòng)分配和釋放。

C代碼中堆內(nèi)存的申請(qǐng)函數(shù)是malloc,常見的內(nèi)存申請(qǐng)代碼如下:

左右滑動(dòng)查看全部代碼>>>

char *info = NULL; /**轉(zhuǎn)換后的字符串**/ info = (char*)malloc(NB_MEM_SPD_INFO_MAX_SIZE); if( NULL == info)
{
    (void)tdm_error("malloc error!\n"); return NB_SA_ERR_HPI_OUT_OF_MEMORY;
}


由于malloc函數(shù)返回的實(shí)際上是一個(gè)內(nèi)存地址,所以保存堆內(nèi)存的變量一定是一個(gè)指針(除非代碼編寫極其不規(guī)范)。

再重復(fù)一遍,保存堆內(nèi)存的變量一定是一個(gè)指針,這對(duì)本文主旨的理解很重要。當(dāng)然,這個(gè)指針可以是單指針,也可以是多重指針。

malloc函數(shù)有很多變種或封裝,如g_malloc、g_malloc0、VOS_Malloc等,這些函數(shù)最終都會(huì)調(diào)用malloc函數(shù)。

2.2堆內(nèi)存的獲取方法

看到本小節(jié)標(biāo)題,可能有些同學(xué)有疑惑,上一小節(jié)中的malloc函數(shù),不就是堆內(nèi)存的獲取方法嗎?

的確是,通過malloc函數(shù)申請(qǐng)是最直接的獲取方法,如果只知道這種堆內(nèi)存獲取方法,就容易掉到坑里了。一般的來講,堆內(nèi)存有如下兩種獲取方法:

方法一:將函數(shù)返回值直接賦給指針,一般表現(xiàn)形式如下:

左右滑動(dòng)查看全部代碼>>>

char *local_pointer_xx = NULL;
local_pointer_xx = (char*)function_xx(para_xx, …);


該類涉及到內(nèi)存申請(qǐng)的函數(shù),返回值一般都指針類型,例如:

左右滑動(dòng)查看全部代碼>>>

GSList* g_slist_append (GSList   *list, gpointer  data);


方法二:將指針地址作為函數(shù)返回參數(shù),通過返回參數(shù)保存堆內(nèi)存地址,一般表現(xiàn)形式如下:

左右滑動(dòng)查看全部代碼>>>

int ret; char *local_pointer_xx = NULL; /**轉(zhuǎn)換后的字符串**/ ret = (char*)function_xx(..., &local_pointer_xx, ...);


該類涉及到內(nèi)存申請(qǐng)的函數(shù),一般都有一個(gè)入?yún)⑹请p重指針,例如:

左右滑動(dòng)查看全部代碼>>>

__STDIO_INLINE _IO_ssize_t;
getline (char **__lineptr, size_t *__n, FILE *__stream);

前面說通過malloc申請(qǐng)內(nèi)存,就屬于方法一的一個(gè)具體表現(xiàn)形式。其實(shí)這兩類方法的本質(zhì)是一樣的,都是函數(shù)內(nèi)部間接申請(qǐng)了內(nèi)存,只是傳遞內(nèi)存的方法不一樣,方法一通過返回值傳遞內(nèi)存指針,方法二通過參數(shù)傳遞內(nèi)存指針。

2.3內(nèi)存泄漏三要素

最常見的內(nèi)存泄漏問題,包含以下三個(gè)要素:

  • 要素一:函數(shù)內(nèi)有局部指針變量定義;

  • 要素二:對(duì)該局部指針有通過上一小節(jié)中“兩種堆內(nèi)存獲取方法”之一獲取內(nèi)存;

  • 要素三:在函數(shù)返回前(含正常分支和異常分支)未釋放該內(nèi)存,也未保存到其它全局變量或返回給上一級(jí)函數(shù)。

2.4內(nèi)存釋放誤區(qū)

稍微使用過C語言編寫代碼的人,都應(yīng)該知道堆內(nèi)存申請(qǐng)之后是需要釋放的。但為何還這么容易出現(xiàn)內(nèi)存泄漏問題呢?

一方面,是開發(fā)人員經(jīng)驗(yàn)不足、意識(shí)不到位或一時(shí)疏忽導(dǎo)致;另一方面,是內(nèi)存釋放誤區(qū)導(dǎo)致。很多開發(fā)人員,認(rèn)為要釋放的內(nèi)存應(yīng)該局限于以下兩種:

1) 直接使用內(nèi)存申請(qǐng)函數(shù)申請(qǐng)出來的內(nèi)存,如malloc、g_malloc等;

2)該開發(fā)人員熟悉的接口中,存在內(nèi)存申請(qǐng)的情況,如iBMC的兄弟,都應(yīng)該知道調(diào)用如下接口需要釋放list指向的內(nèi)存:

左右滑動(dòng)查看全部代碼>>>

dfl_get_object_list(const char* class_name, GSList **list);

按照以上思維編寫代碼,一旦遇到不熟悉的接口中需要釋放內(nèi)存的問題,就完全沒有釋放內(nèi)存的意識(shí),內(nèi)存泄漏問題就自然產(chǎn)生了。

3.內(nèi)存泄漏問題檢視方法

檢視內(nèi)存泄漏問題,關(guān)鍵還是要養(yǎng)成良好的編碼檢視習(xí)慣。與內(nèi)存泄漏三要素對(duì)應(yīng),需

要做到如下三點(diǎn):

1) 在函數(shù)中看到有局部指針,就要警惕內(nèi)存泄漏問題,養(yǎng)成進(jìn)一步排查的習(xí)慣

2) 分析對(duì)局部指針的賦值操作,是否屬于前面所說的“兩種堆內(nèi)存獲取方法”之一,如果是,就要分析函數(shù)返回的指針到底指向啥?

是全局?jǐn)?shù)據(jù)、靜態(tài)數(shù)據(jù)還是堆內(nèi)存?對(duì)于不熟悉的接口,要找到對(duì)應(yīng)的接口文檔或源代碼分析;又或者看看代碼中其它地方對(duì)該接口的引用,是否進(jìn)行了內(nèi)存釋放;

3) 如果確認(rèn)對(duì)局部指針存在內(nèi)存申請(qǐng)操作,就需要分析該內(nèi)存的去向,是會(huì)被保存在全局變量嗎?又或者會(huì)被作為函數(shù)返回值嗎?如果都不是,就需要排查函數(shù)所有有”return“的地方,保證內(nèi)存被正確釋放。


內(nèi)存泄漏是比較難查的bug之一?有什么查找技巧嗎?歡迎留言交流~

-END-


來源 :https://blog.csdn.net/devcloud/article/details/108335912




推薦閱讀



【01】怎么學(xué)習(xí)單片機(jī)外圍器件?

【02】漫畫版:如何學(xué)習(xí)單片機(jī)?

【03】單片機(jī):3種時(shí)鐘電路方案對(duì)比,你常用哪一種?

【04】單片機(jī)編程技術(shù)學(xué)習(xí)攻略

【05】國產(chǎn)超低價(jià)單片機(jī)五宗罪!“扶不起”的原因就是它們?


免責(zé)聲明:整理文章為傳播相關(guān)技術(shù),版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除

免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場,如有問題,請(qǐng)聯(lián)系我們,謝謝!

嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營業(yè)績穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤率延續(xù)升勢 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競爭力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競爭優(yōu)勢...

關(guān)鍵字: 通信 BSP 電信運(yùn)營商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場 NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡稱"軟通動(dòng)力")與長三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉