浓毛老太交欧美老妇热爱乱,蜜臀性色av免费,妺妺窝人体色www看美女,久久久久久久久久久大尺度免费视频,麻豆人妻无码性色av专区

位置:51電子網(wǎng) » 技術(shù)資料 » EDA/PLD

一個(gè)動(dòng)態(tài)內(nèi)存管理模塊的實(shí)現(xiàn)

發(fā)布時(shí)間:2007/9/11 0:00:00 訪問(wèn)次數(shù):484

    摘要:介紹一個(gè)動(dòng)態(tài)內(nèi)存管理模塊,可以有效地檢測(cè)C程序中內(nèi)存泄漏和寫(xiě)內(nèi)存越界等錯(cuò)誤,適用于具有標(biāo)準(zhǔn)C語(yǔ)言開(kāi)發(fā)環(huán)境的各種平臺(tái)。

    關(guān)鍵詞:C語(yǔ)言 動(dòng)態(tài)內(nèi)存 內(nèi)存泄漏 寫(xiě)越界

引言

當(dāng)前,絕大多數(shù)嵌入式平臺(tái)上的軟件都采用C語(yǔ)言編寫(xiě)。除了代碼簡(jiǎn)潔、運(yùn)行高效之外,靈活操作內(nèi)存的能力更是C語(yǔ)言的重要特色。然而,不恰當(dāng)?shù)膬?nèi)存操作通常也是錯(cuò)誤的根源之一。如“內(nèi)存泄漏” ——不能正確地釋放已分配的動(dòng)態(tài)內(nèi)存,就是一種非常難于檢測(cè)的存錯(cuò)誤。持續(xù)的內(nèi)存泄漏會(huì)使程序性能下降到最終完全不能運(yùn)行,進(jìn)而影響到所有其它有動(dòng)態(tài)內(nèi)存需求的程序,在某些相對(duì)簡(jiǎn)單的嵌入式平臺(tái)上甚至?xí)恋K操作系統(tǒng)的運(yùn)轉(zhuǎn)。再如“寫(xiě)內(nèi)存越界”,一種不合法的寫(xiě)內(nèi)存操作,極可能破壞到本程序中正在使用的其它數(shù)據(jù),嚴(yán)重的時(shí)候還可能對(duì)其它正在運(yùn)行的程序甚至整個(gè)系統(tǒng)造成影響。為此,本文介紹一個(gè)增強(qiáng)的、可定制的動(dòng)態(tài)內(nèi)存管理模塊(以下不妨簡(jiǎn)稱Fense),在C語(yǔ)言提供的內(nèi)存分配函數(shù)基礎(chǔ)上,增加了對(duì)動(dòng)態(tài)內(nèi)存的管理功能;能記錄軟件運(yùn)行過(guò)程中出現(xiàn)的內(nèi)存泄漏信息,同時(shí)也具一定的監(jiān)測(cè)內(nèi)存操作的能力;可以發(fā)現(xiàn)絕大多數(shù)對(duì)動(dòng)態(tài)內(nèi)存的寫(xiě)越界錯(cuò)誤。

1 Fense的設(shè)計(jì)原理

Fense通過(guò)設(shè)立一個(gè)雙向鏈表(struct Head *stHead)來(lái)保存所有被分配的動(dòng)態(tài)內(nèi)存塊的信息。鏈表中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)動(dòng)態(tài)內(nèi)存塊,節(jié)點(diǎn)中包括此內(nèi)存大小、分配發(fā)生時(shí)所在的源文件名和行號(hào)以及被釋放的時(shí)候,F(xiàn)ense又從st_Head中刪除之,檢查st_Head中的節(jié)點(diǎn)即可得到未被釋放的本節(jié)點(diǎn)的數(shù)值校驗(yàn)和等。Fense將每一個(gè)分配的動(dòng)態(tài)內(nèi)存塊插入到鏈表st_Head中;當(dāng)此內(nèi)存放內(nèi)存塊信息。鏈表節(jié)點(diǎn)結(jié)構(gòu)定義如下:

struct Head{

char file; /分配所在源文件名*/

unsigned long line; /*分配所在的行號(hào)*/

size_t size; /*分配的內(nèi)存大小*/

int checksum; /*鏈表節(jié)點(diǎn)校驗(yàn)和*/

struct Head prev,next; /*雙鏈表的前后節(jié)點(diǎn)指針*/

};

/*全局的雙向鏈表*/

struct Head *st_Head=NULL;

為了檢測(cè)寫(xiě)越界的錯(cuò)誤,F(xiàn)ense在用戶申請(qǐng)的內(nèi)存前后各增加了一定大小的內(nèi)存作為監(jiān)測(cè)區(qū)域,并初始化成預(yù)定值。這樣,當(dāng)程序發(fā)生越界寫(xiě)操作時(shí),預(yù)定值就會(huì)發(fā)生改變,F(xiàn)ense即可檢測(cè)到錯(cuò)誤。

通過(guò)Fense分配到的動(dòng)態(tài)內(nèi)存結(jié)構(gòu)如圖1所示。由此可知,F(xiàn)ense_Malloc(Fense的內(nèi)存分配函數(shù))返回給用戶的指針ptr指向的是用戶申請(qǐng)內(nèi)存區(qū)域的起始位置。鏈表節(jié)點(diǎn)、前/后監(jiān)測(cè)區(qū)域均為Fense內(nèi)部使用,是用戶不可見(jiàn)的。

2 用戶定制選項(xiàng)

Fense有5組宏定義提供給用戶對(duì)功能進(jìn)行定制。各組選項(xiàng)控制意義如下:

WARN_ON_ZERO_MALLOC 用戶申請(qǐng)零分配空間時(shí)警告信息。

FILL_ON_MALLOC 分配時(shí)初始化內(nèi)存塊

FILL_ON_MALLOC_VAL 分配初始化時(shí)的預(yù)設(shè)值

FILL_ON_FREE 釋放時(shí)填充內(nèi)存塊

FILL_ON_FREE_VAL 釋放時(shí)填充內(nèi)存塊的預(yù)設(shè)值

以上4個(gè)選項(xiàng)的主要功能是初始化剛分配

    摘要:介紹一個(gè)動(dòng)態(tài)內(nèi)存管理模塊,可以有效地檢測(cè)C程序中內(nèi)存泄漏和寫(xiě)內(nèi)存越界等錯(cuò)誤,適用于具有標(biāo)準(zhǔn)C語(yǔ)言開(kāi)發(fā)環(huán)境的各種平臺(tái)。

    關(guān)鍵詞:C語(yǔ)言 動(dòng)態(tài)內(nèi)存 內(nèi)存泄漏 寫(xiě)越界

引言

當(dāng)前,絕大多數(shù)嵌入式平臺(tái)上的軟件都采用C語(yǔ)言編寫(xiě)。除了代碼簡(jiǎn)潔、運(yùn)行高效之外,靈活操作內(nèi)存的能力更是C語(yǔ)言的重要特色。然而,不恰當(dāng)?shù)膬?nèi)存操作通常也是錯(cuò)誤的根源之一。如“內(nèi)存泄漏” ——不能正確地釋放已分配的動(dòng)態(tài)內(nèi)存,就是一種非常難于檢測(cè)的存錯(cuò)誤。持續(xù)的內(nèi)存泄漏會(huì)使程序性能下降到最終完全不能運(yùn)行,進(jìn)而影響到所有其它有動(dòng)態(tài)內(nèi)存需求的程序,在某些相對(duì)簡(jiǎn)單的嵌入式平臺(tái)上甚至?xí)恋K操作系統(tǒng)的運(yùn)轉(zhuǎn)。再如“寫(xiě)內(nèi)存越界”,一種不合法的寫(xiě)內(nèi)存操作,極可能破壞到本程序中正在使用的其它數(shù)據(jù),嚴(yán)重的時(shí)候還可能對(duì)其它正在運(yùn)行的程序甚至整個(gè)系統(tǒng)造成影響。為此,本文介紹一個(gè)增強(qiáng)的、可定制的動(dòng)態(tài)內(nèi)存管理模塊(以下不妨簡(jiǎn)稱Fense),在C語(yǔ)言提供的內(nèi)存分配函數(shù)基礎(chǔ)上,增加了對(duì)動(dòng)態(tài)內(nèi)存的管理功能;能記錄軟件運(yùn)行過(guò)程中出現(xiàn)的內(nèi)存泄漏信息,同時(shí)也具一定的監(jiān)測(cè)內(nèi)存操作的能力;可以發(fā)現(xiàn)絕大多數(shù)對(duì)動(dòng)態(tài)內(nèi)存的寫(xiě)越界錯(cuò)誤。

1 Fense的設(shè)計(jì)原理

Fense通過(guò)設(shè)立一個(gè)雙向鏈表(struct Head *stHead)來(lái)保存所有被分配的動(dòng)態(tài)內(nèi)存塊的信息。鏈表中的每個(gè)節(jié)點(diǎn)對(duì)應(yīng)一個(gè)動(dòng)態(tài)內(nèi)存塊,節(jié)點(diǎn)中包括此內(nèi)存大小、分配發(fā)生時(shí)所在的源文件名和行號(hào)以及被釋放的時(shí)候,F(xiàn)ense又從st_Head中刪除之,檢查st_Head中的節(jié)點(diǎn)即可得到未被釋放的本節(jié)點(diǎn)的數(shù)值校驗(yàn)和等。Fense將每一個(gè)分配的動(dòng)態(tài)內(nèi)存塊插入到鏈表st_Head中;當(dāng)此內(nèi)存放內(nèi)存塊信息。鏈表節(jié)點(diǎn)結(jié)構(gòu)定義如下:

struct Head{

char file; /分配所在源文件名*/

unsigned long line; /*分配所在的行號(hào)*/

size_t size; /*分配的內(nèi)存大小*/

int checksum; /*鏈表節(jié)點(diǎn)校驗(yàn)和*/

struct Head prev,next; /*雙鏈表的前后節(jié)點(diǎn)指針*/

};

/*全局的雙向鏈表*/

struct Head *st_Head=NULL;

為了檢測(cè)寫(xiě)越界的錯(cuò)誤,F(xiàn)ense在用戶申請(qǐng)的內(nèi)存前后各增加了一定大小的內(nèi)存作為監(jiān)測(cè)區(qū)域,并初始化成預(yù)定值。這樣,當(dāng)程序發(fā)生越界寫(xiě)操作時(shí),預(yù)定值就會(huì)發(fā)生改變,F(xiàn)ense即可檢測(cè)到錯(cuò)誤。

通過(guò)Fense分配到的動(dòng)態(tài)內(nèi)存結(jié)構(gòu)如圖1所示。由此可知,F(xiàn)ense_Malloc(Fense的內(nèi)存分配函數(shù))返回給用戶的指針ptr指向的是用戶申請(qǐng)內(nèi)存區(qū)域的起始位置。鏈表節(jié)點(diǎn)、前/后監(jiān)測(cè)區(qū)域均為Fense內(nèi)部使用,是用戶不可見(jiàn)的。

2 用戶定制選項(xiàng)

Fense有5組宏定義提供給用戶對(duì)功能進(jìn)行定制。各組選項(xiàng)控制意義如下:

WARN_ON_ZERO_MALLOC 用戶申請(qǐng)零分配空間時(shí)警告信息。

FILL_ON_MALLOC 分配時(shí)初始化內(nèi)存塊

FILL_ON_MALLOC_VAL 分配初始化時(shí)的預(yù)設(shè)值

FILL_ON_FREE 釋放時(shí)填充內(nèi)存塊

FILL_ON_FREE_VAL 釋放時(shí)填充內(nèi)存塊的預(yù)設(shè)值

以上4個(gè)選項(xiàng)的主要功能是初始化剛分配

相關(guān)IC型號(hào)

熱門(mén)點(diǎn)擊

 

推薦技術(shù)資料

聲道前級(jí)設(shè)計(jì)特點(diǎn)
    與通常的Hi-Fi前級(jí)不同,EP9307-CRZ這臺(tái)分... [詳細(xì)]
版權(quán)所有:51dzw.COM
深圳服務(wù)熱線:13751165337  13692101218
粵ICP備09112631號(hào)-6(miitbeian.gov.cn)
公網(wǎng)安備44030402000607
深圳市碧威特網(wǎng)絡(luò)技術(shù)有限公司
付款方式


 復(fù)制成功!