日韩欧美自拍在线观看-欧美精品在线看片一区二区-高清性视频一区二区播放-欧美日韩女优制服另类-国产精品久久久久久av蜜臀-成人在线黄色av网站-肥臀熟妇一区二区三区-亚洲视频在线播放老色-在线成人激情自拍视频

一個動態(tài)內(nèi)存管理模塊的實現(xiàn)

出處:chunyang 發(fā)布于:2007-11-30 15:41:31

      引言

       當前,絕大多數(shù)嵌入式平臺上的軟件都采用C語言編寫。除了代碼簡潔、運行高效之外,靈活操作內(nèi)存的能力更是C語言的重要特色。然而,不恰當?shù)膬?nèi)存操作通常也是錯誤的根源之一。如“內(nèi)存泄漏” ——不能正確地釋放已分配的動態(tài)內(nèi)存,就是一種非常難于檢測的存錯誤。持續(xù)的內(nèi)存泄漏會使程序性能下降到終完全不能運行,進而影響到所有其它有動態(tài)內(nèi)存需求的程序,在某些相對簡單的嵌入式平臺上甚至會妨礙操作系統(tǒng)的運轉(zhuǎn)。再如“寫內(nèi)存越界”,一種不合法的寫內(nèi)存操作,極可能破壞到本程序中正在使用的其它數(shù)據(jù),嚴重的時候還可能對其它正在運行的程序甚至整個系統(tǒng)造成影響。為此,本文介紹一個增強的、可定制的動態(tài)內(nèi)存管理模塊(以下不妨簡稱Fense),在 C語言提供的內(nèi)存分配函數(shù)基礎(chǔ)上,增加了對動態(tài)內(nèi)存的管理功能;能記錄軟件運行過程中出現(xiàn)的內(nèi)存泄漏信息,同時也具一定的監(jiān)測內(nèi)存操作的能力;可以發(fā)現(xiàn)絕大多數(shù)對動態(tài)內(nèi)存的寫越界錯誤。
     
1 Fense的設(shè)計原理
      
Fense 通過設(shè)立一個雙向鏈表(struct Head *stHead)來保存所有被分配的動態(tài)內(nèi)存塊的信息。鏈表中的每個節(jié)點對應(yīng)一個動態(tài)內(nèi)存塊,節(jié)點中包括此內(nèi)存大小、分配發(fā)生時所在的源文件名和行號以及被釋放的時候,F(xiàn)ense又從st_Head中刪除之,檢查st_Head中的節(jié)點即可得到未被釋放的本節(jié)點的數(shù)值校驗和等。Fense將每一個分配的動態(tài)內(nèi)存塊插入到鏈表st_Head中;當此內(nèi)存放內(nèi)存塊信息。鏈表節(jié)點結(jié)構(gòu)定義如下:
       struct Head{
       char file; /分配所在源文件名*/
       unsigned lONg line; /*分配所在的行號*/
       size_t size; /*分配的內(nèi)存大小*/
       int checksum; /*鏈表節(jié)點校驗和*/
       struct Head prev,next; /*雙鏈表的前后節(jié)點指針*/
       };
       /*全局的雙向鏈表*/
       struct Head *st_Head=NULL;
  
       為了檢測寫越界的錯誤,F(xiàn)ense在用戶申請的內(nèi)存前后各增加了一定大小的內(nèi)存作為監(jiān)測區(qū)域,并初始化成預(yù)定值。這樣,當程序發(fā)生越界寫操作時,預(yù)定值就會發(fā)生改變,F(xiàn)ense即可檢測到錯誤。
       通過Fense分配到的動態(tài)內(nèi)存結(jié)構(gòu)如圖1所示。由此可知,F(xiàn)ense_Malloc(Fense的內(nèi)存分配函數(shù))返回給用戶的指針ptr指向的是用戶申請內(nèi)存區(qū)域的起始位置。鏈表節(jié)點、前/后監(jiān)測區(qū)域均為Fense內(nèi)部使用,是用戶不可見的。

動態(tài)內(nèi)存結(jié)構(gòu)


       2 用戶定制選項
      
Fense有5組宏定義提供給用戶對功能進行定制。各組選項控制意義如下:
       WARN_ON_ZERO_MALLOC 用戶申請零分配空間時警告信息;
       FILL_ON_MALLOC 分配時初始化內(nèi)存塊;
       FILL_ON_MALLOC_VAL 分配初始化時的預(yù)設(shè)值;
       FILL_ON_FREE 釋放時填充內(nèi)存塊;
       FILL_ON_FREE_VAL 釋放時填充內(nèi)存塊的預(yù)設(shè)值。


  
關(guān)鍵詞:一個動態(tài)內(nèi)存管理模塊的實現(xiàn)

版權(quán)與免責聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://www.hbjingang.com,違反者本網(wǎng)將追究相關(guān)法律責任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔此類作品侵權(quán)行為的直接責任及連帶責任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!