• 
    <ul id="o6k0g"></ul>
    <ul id="o6k0g"></ul>

    快速定位錯(cuò)誤源頭的內(nèi)存管理方法技術(shù)

    技術(shù)編號(hào):8452890 閱讀:208 留言:0更新日期:2013-03-21 14:02
    本發(fā)明專(zhuān)利技術(shù)提供一種快速定位錯(cuò)誤源頭的內(nèi)存管理方法,從內(nèi)存單元中預(yù)分配出部分內(nèi)存作為靜態(tài)內(nèi)存,其余內(nèi)存均為用于動(dòng)態(tài)分配的內(nèi)存;將所述靜態(tài)內(nèi)存劃分為復(fù)數(shù)個(gè)靜態(tài)管理塊;通過(guò)內(nèi)存分配登記步驟、執(zhí)行內(nèi)存變更步驟以及內(nèi)存釋放步驟實(shí)現(xiàn),極大地節(jié)約了開(kāi)發(fā)過(guò)程中的關(guān)于動(dòng)態(tài)內(nèi)存的除錯(cuò)時(shí)間,同時(shí)大幅提高產(chǎn)品在這方面的穩(wěn)定性和可靠性。

    【技術(shù)實(shí)現(xiàn)步驟摘要】

    本專(zhuān)利技術(shù)涉及一種內(nèi)存管理方法,特別涉及。
    技術(shù)介紹
    在嵌入式產(chǎn)品的軟件開(kāi)發(fā)過(guò)程中經(jīng)常出現(xiàn)的動(dòng)態(tài)內(nèi)存問(wèn)題包括動(dòng)態(tài)內(nèi)存泄漏、動(dòng)態(tài)內(nèi)存錯(cuò)誤地址、動(dòng)態(tài)內(nèi)存多次釋放等,嚴(yán)重影響了嵌入式產(chǎn)品的開(kāi)發(fā)進(jìn)度、可靠性、穩(wěn)定性。隨著嵌入式產(chǎn)品軟件功能的日益復(fù)雜,同時(shí)客戶(hù)對(duì)嵌入式產(chǎn)品的可靠性和穩(wěn)定性要求越來(lái)越高,有必要找到一種相對(duì)簡(jiǎn)易同時(shí)快速但又要比較通用的動(dòng)態(tài)內(nèi)存管理方法,能夠快速且準(zhǔn)確定位內(nèi)存錯(cuò)誤的源頭。現(xiàn)有技術(shù)中,一般是通過(guò)內(nèi)存檢測(cè)工具發(fā)現(xiàn)內(nèi)存問(wèn) 題,常見(jiàn)的有動(dòng)態(tài)檢測(cè)工具和靜態(tài)檢測(cè)工具。動(dòng)態(tài)檢測(cè)工具中有代表性的有valgrind,靜態(tài)檢測(cè)工具中有代表性的有l(wèi)int。valgrind是一款I(lǐng)inux下尋找內(nèi)存管理的問(wèn)題的開(kāi)源工具,雖然具有比較豐富的內(nèi)存管理能力但僅能適用于x86/amd/ppc的硬件平臺(tái)和Iinux的軟件平臺(tái)。Iint是對(duì)程序進(jìn)行更加廣泛的錯(cuò)誤分析,是一種更加嚴(yán)密的編譯工具,但無(wú)法檢測(cè)到軟件中稍微復(fù)雜的動(dòng)態(tài)內(nèi)存使用問(wèn)題,而面對(duì)更加微妙的內(nèi)存分配策略,Iint無(wú)法勝任。還有一種是特定IDE開(kāi)發(fā)平臺(tái)提供的針對(duì)特定平臺(tái)的動(dòng)態(tài)內(nèi)存檢測(cè)模塊,典型的有Vc++提供的debuger和crt堆除錯(cuò)函數(shù),但是這些函數(shù)無(wú)法跨越軟件平臺(tái)。
    技術(shù)實(shí)現(xiàn)思路
    本專(zhuān)利技術(shù)要解決的技術(shù)問(wèn)題,在于提供一種,其可以快速發(fā)現(xiàn)內(nèi)存的使用問(wèn)題,同時(shí)具有無(wú)MCU依賴(lài),支持檢測(cè)有源代碼模塊的動(dòng)態(tài)內(nèi)存,也支持監(jiān)測(cè)僅提供二進(jìn)制形式的模塊,全面監(jiān)測(cè)軟件中動(dòng)態(tài)分配用到的各種應(yīng)用編程接□。本專(zhuān)利技術(shù)要解決的技術(shù)問(wèn)題之一,在于提供一種,其可以運(yùn)行在絕大多數(shù)的mcu硬件架構(gòu)上,也可以移植到支持c庫(kù)的任意軟件平臺(tái)上。該方法可以快速發(fā)現(xiàn)內(nèi)存的使用問(wèn)題,通過(guò)查看靜態(tài)管理塊快速定位錯(cuò)誤的源頭,極大地節(jié)約了開(kāi)發(fā)過(guò)程中的關(guān)于動(dòng)態(tài)內(nèi)存的除錯(cuò)時(shí)間,同時(shí)大幅提高產(chǎn)品的穩(wěn)定性和可靠性。本專(zhuān)利技術(shù)通過(guò)以下技術(shù)方案解決上述技術(shù)問(wèn)題一—種,所述內(nèi)存管理方法適用于基于C語(yǔ)言的嵌入式軟件,首先從內(nèi)存單元中預(yù)分配出部分內(nèi)存作為靜態(tài)內(nèi)存,其余內(nèi)存均為用于動(dòng)態(tài)分配的內(nèi)存;其次,將所述靜態(tài)內(nèi)存劃分為復(fù)數(shù)個(gè)靜態(tài)管理塊;當(dāng)動(dòng)態(tài)分配新的內(nèi)存時(shí),執(zhí)行內(nèi)存分配登記步驟;當(dāng)已分配的內(nèi)存大小發(fā)生變化時(shí),執(zhí)行內(nèi)存變更步驟;當(dāng)已分配的內(nèi)存需要釋放時(shí),執(zhí)行內(nèi)存釋放步驟;所述內(nèi)存分配登記步驟具體為步驟I、查找未使用的靜態(tài)管理塊,若找到,執(zhí)行步驟2,若未找到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤; 步驟2、動(dòng)態(tài)分配內(nèi)存,若分配成功,將被分配的內(nèi)存的首地址和內(nèi)存大小記錄到所述靜態(tài)管理塊,并將該靜態(tài)管理塊標(biāo)記為已使用;若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;若需要多次動(dòng)態(tài)分配內(nèi)存,重復(fù)執(zhí)行步驟I和步驟2 ;所述內(nèi)存變更步驟具體為步驟3、根據(jù)將要發(fā)生變更的內(nèi)存的首地址從所述靜態(tài)內(nèi)存中搜索出該首地址對(duì)應(yīng)的靜態(tài)管理塊;搜索到,執(zhí)行步驟4,未搜索到,輸出錯(cuò)誤信息并等待;步驟4、若變更后的內(nèi)存大小比原來(lái)大,則重新動(dòng)態(tài)分配內(nèi)存,若分配成功,則將重新分配的內(nèi)存的新首地址以及內(nèi)存大小更新至所述靜態(tài)管理塊,若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;若變更后的內(nèi)存大小比原來(lái)小,則直接把變更后的內(nèi)存大小直接更新所述靜態(tài)管理塊中;所述內(nèi)存釋放步驟具體為步驟5、根據(jù)需要釋放的內(nèi)存的首地址從所述靜態(tài)內(nèi)存中搜索出該首地址對(duì)應(yīng)的靜態(tài)管理塊,釋放該內(nèi)存,并將該靜態(tài)管理塊標(biāo)記為未使用;若未搜索到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤。進(jìn)一步地,所述內(nèi)存分配登記步驟通過(guò)Malloc或Calloc宏調(diào)用實(shí)現(xiàn)。進(jìn)一步地,所述內(nèi)存變更步驟通過(guò)Realloc宏調(diào)用實(shí)現(xiàn)。進(jìn)一步地,所述內(nèi)存變更步驟通過(guò)Free宏調(diào)用實(shí)現(xiàn)。本專(zhuān)利技術(shù)要解決的技術(shù)問(wèn)題之二,在于提供一種,其可以運(yùn)行在絕大多數(shù)的mcu硬件架構(gòu)上,也可以移植到支持c++庫(kù)的任意軟件平臺(tái)上。該方法可以快速發(fā)現(xiàn)內(nèi)存的使用問(wèn)題,通過(guò)查看靜態(tài)管理塊快速定位錯(cuò)誤的源頭,極大地節(jié)約了開(kāi)發(fā)過(guò)程中的關(guān)于動(dòng)態(tài)內(nèi)存的除錯(cuò)時(shí)間,同時(shí)大幅提高產(chǎn)品的穩(wěn)定性和可靠性。本專(zhuān)利技術(shù)通過(guò)以下技術(shù)方案解決上述技術(shù)問(wèn)題二 一種,所述內(nèi)存管理方法適用于基于C++語(yǔ)言的嵌入式軟件,首先,從內(nèi)存單元中預(yù)分配出部分內(nèi)存作為靜態(tài)內(nèi)存,其余內(nèi)存均為用于動(dòng)態(tài)分配的內(nèi)存;其次,將所述靜態(tài)內(nèi)存劃分為復(fù)數(shù)個(gè)靜態(tài)管理塊;當(dāng)動(dòng)態(tài)分配新的內(nèi)存時(shí),執(zhí)行內(nèi)存分配登記步驟;當(dāng)已分配的內(nèi)存大小發(fā)生變化時(shí),也必須重新分配新的內(nèi)存,執(zhí)行所述內(nèi)存分配登記步驟;當(dāng)已分配的內(nèi)存需要釋放時(shí),執(zhí)行內(nèi)存釋放步驟;所述內(nèi)存分配登記步驟具體為步驟10、查找未使用的靜態(tài)管理塊,若找到,執(zhí)行步驟20,若未找到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;步驟20、動(dòng)態(tài)分配內(nèi)存,若分配成功,將被分配的內(nèi)存的首地址和內(nèi)存大小記錄到所述靜態(tài)管理塊,并將該靜態(tài)管理塊標(biāo)記為已使用;若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;若需要多次動(dòng)態(tài)分配內(nèi)存,重復(fù)執(zhí)行步驟10和步驟20 ;所述內(nèi)存釋放步驟具體為步驟30、根據(jù)需要釋放的內(nèi)存的首地址從所述靜態(tài)內(nèi)存中搜索出該首地址對(duì)應(yīng)的靜態(tài)管理塊,釋放該內(nèi)存,并將該靜態(tài)管理塊標(biāo)記為未使用;若未搜索出,貝1J輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤。進(jìn)一步地,所述內(nèi)存分配登記步驟是通過(guò)重載C++庫(kù)提供的new函數(shù)實(shí)現(xiàn)。進(jìn)一步地,所述內(nèi)存釋放步驟是通過(guò)重載C++庫(kù)提供的delete函數(shù)實(shí)現(xiàn)。本專(zhuān)利技術(shù)具有如下優(yōu)點(diǎn)本專(zhuān)利技術(shù)的內(nèi)存管理方法可以基于c語(yǔ)言或C++語(yǔ)言開(kāi)發(fā),可以運(yùn)行在絕大多數(shù)的mcu硬件架構(gòu)上,也可以移植到基于c語(yǔ)言或c++語(yǔ)言的任意軟件平臺(tái)上。本專(zhuān)利技術(shù)通過(guò)查看記錄有各個(gè)動(dòng)態(tài)內(nèi)存首地址和大小的靜態(tài)管理塊快速定位錯(cuò)誤的源頭,極大地節(jié)約了開(kāi)發(fā)過(guò)程中的關(guān)于動(dòng)態(tài)內(nèi)存的除錯(cuò)時(shí)間,同時(shí)大幅提高產(chǎn)品的穩(wěn)定性和可靠性。附圖說(shuō)明下面參照附圖結(jié)合實(shí)施例對(duì)本專(zhuān)利技術(shù)作進(jìn)一步的說(shuō)明。圖1為本專(zhuān)利技術(shù)技術(shù)方案一的內(nèi)存分配登記步驟流程圖。圖2為本專(zhuān)利技術(shù)技術(shù)方案一的內(nèi)存變更步驟流程圖。圖3為本專(zhuān)利技術(shù)技術(shù)方案一的內(nèi)存釋放步驟流程圖。圖4為本專(zhuān)利技術(shù)技術(shù)方案二的內(nèi)存分配登記步驟流程圖。圖5為本專(zhuān)利技術(shù)技術(shù)方案二的內(nèi)存釋放步驟流程圖。具體實(shí)施方式技術(shù)方案一請(qǐng)參閱圖1和圖3,一種,所述內(nèi)存管理方法適用于基于C語(yǔ)言的嵌入式軟件,首先從內(nèi)存單元中預(yù)分配出部分內(nèi)存作為靜態(tài)內(nèi)存,其余內(nèi)存均為用于動(dòng)態(tài)分配的內(nèi)存;其次,將所述靜態(tài)內(nèi)存劃分為復(fù)數(shù)個(gè)靜態(tài)管理塊;當(dāng)動(dòng)態(tài)分配新的內(nèi)存時(shí),執(zhí)行內(nèi)存分配登記步驟,所述內(nèi)存分配登記步驟通過(guò) Malloc或Calloc宏調(diào)用實(shí)現(xiàn);當(dāng)已分配的內(nèi)存大小發(fā)生變化時(shí),執(zhí)行內(nèi)存變更步驟,所述內(nèi)存變更步驟通過(guò)Realloc宏調(diào)用實(shí)現(xiàn);當(dāng)已分配的內(nèi)存需要釋放時(shí),執(zhí)行內(nèi)存釋放步驟, 所述內(nèi)存變更步驟通過(guò)Free宏調(diào)用實(shí)現(xiàn);請(qǐng)參閱圖1,所述內(nèi)存分配登記步驟具體為步驟I、通過(guò)Malloc或Calloc宏調(diào)用,查找未使用的靜態(tài)管理塊,若找到,執(zhí)行步驟2,若未找到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;其輸出的錯(cuò)誤信息是提示用戶(hù)靜態(tài)管理塊耗盡或動(dòng)態(tài)內(nèi)存耗盡,同時(shí)可以打印出所有靜態(tài)管理塊的內(nèi)部信息,該類(lèi)錯(cuò)誤可能是動(dòng)態(tài)內(nèi)存泄露錯(cuò)誤;步驟2、動(dòng)態(tài)分配內(nèi)存,若分配成功,將被分配的內(nèi)存的首地址和內(nèi)存大小記錄到所述靜態(tài)管理塊,并將該靜態(tài)管理塊標(biāo)記為已使用;若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位本文檔來(lái)自技高網(wǎng)...

    【技術(shù)保護(hù)點(diǎn)】
    快速定位錯(cuò)誤源頭的內(nèi)存管理方法,其特征在于:所述內(nèi)存管理方法適用于基于C語(yǔ)言的嵌入式軟件,首先從內(nèi)存單元中預(yù)分配出部分內(nèi)存作為靜態(tài)內(nèi)存,其余內(nèi)存均為用于動(dòng)態(tài)分配的內(nèi)存;其次,將所述靜態(tài)內(nèi)存劃分為復(fù)數(shù)個(gè)靜態(tài)管理塊;當(dāng)動(dòng)態(tài)分配新的內(nèi)存時(shí),執(zhí)行內(nèi)存分配登記步驟;當(dāng)已分配的內(nèi)存大小發(fā)生變化時(shí),執(zhí)行內(nèi)存變更步驟;當(dāng)已分配的內(nèi)存需要釋放時(shí),執(zhí)行內(nèi)存釋放步驟;所述內(nèi)存分配登記步驟具體為:步驟1、查找未使用的靜態(tài)管理塊,若找到,執(zhí)行步驟2,若未找到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;步驟2、動(dòng)態(tài)分配內(nèi)存,若分配成功,將被分配的內(nèi)存的首地址和內(nèi)存大小記錄到所述靜態(tài)管理塊,并將該靜態(tài)管理塊標(biāo)記為已使用;若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;若需要多次動(dòng)態(tài)分配內(nèi)存,重復(fù)執(zhí)行步驟1和步驟2;所述內(nèi)存變更步驟具體為:步驟3、根據(jù)將要發(fā)生變更的內(nèi)存的首地址從所述靜態(tài)內(nèi)存中搜索出該首地址對(duì)應(yīng)的靜態(tài)管理塊;搜索到,執(zhí)行步驟4,未搜索到,輸出錯(cuò)誤信息并等待;步驟4、若變更后的內(nèi)存大小比原來(lái)大,則重新動(dòng)態(tài)分配內(nèi)存,若分配成功,則將重新分配的內(nèi)存的新首地址以及內(nèi)存大小更新至所述靜態(tài)管理塊,若分配不成功,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤;若變更后的內(nèi)存大小比原來(lái)小,則直接把變更后的內(nèi)存大小直接更新所述靜態(tài)管理塊中;所述內(nèi)存釋放步驟具體為:步驟5、根據(jù)需要釋放的內(nèi)存的首地址從所述靜態(tài)內(nèi)存中搜索出該首地址對(duì)應(yīng)的靜態(tài)管理塊,釋放該內(nèi)存,并將該靜態(tài)管理塊標(biāo)記為未使用;若未 搜索到,輸出錯(cuò)誤信息并等待開(kāi)發(fā)人員快速分析定位錯(cuò)誤。...

    【技術(shù)特征摘要】

    【專(zhuān)利技術(shù)屬性】
    技術(shù)研發(fā)人員:翁俊峰張登峰余杭軍
    申請(qǐng)(專(zhuān)利權(quán))人:福建升騰資訊有限公司
    類(lèi)型:發(fā)明
    國(guó)別省市:

    網(wǎng)友詢(xún)問(wèn)留言 已有0條評(píng)論
    • 還沒(méi)有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。

    1
    主站蜘蛛池模板: 日韩人妻无码一区二区三区99| 中文午夜乱理片无码| 久久久久亚洲av无码专区蜜芽| 天码av无码一区二区三区四区| 中文字幕av无码不卡| 久久亚洲精品无码VA大香大香| 亚洲av无码无线在线观看| 国产精品午夜福利在线无码| 日韩精品无码一区二区三区免费| 亚洲人成网亚洲欧洲无码| 中文字幕乱妇无码AV在线| 精品久久久无码人妻中文字幕豆芽| 久久久久成人精品无码| 亚洲最大无码中文字幕| 亚洲精品无码永久在线观看你懂的| 亚洲AV综合色区无码一二三区 | 亚洲桃色AV无码| 99久久人妻无码精品系列蜜桃| 人妻无码aⅴ不卡中文字幕| 亚洲精品中文字幕无码AV| 超清无码一区二区三区| 无码中文av有码中文av| 久久国产精品无码一区二区三区| 国产免费黄色无码视频| 国产裸模视频免费区无码| 精品无码人妻一区二区三区品| 亚洲人成影院在线无码观看| 亚洲精品无码久久久久A片苍井空| 亚洲综合av永久无码精品一区二区| 免费A级毛片无码久久版| 69堂人成无码免费视频果冻传媒| 亚洲国产a∨无码中文777| 无码少妇一区二区浪潮av| 久久美利坚合众国AV无码| 久久久久av无码免费网| 色欲狠狠躁天天躁无码中文字幕| 2014AV天堂无码一区| 国产精品无码av在线播放| 亚洲AV无码乱码在线观看裸奔 | 国产免费黄色无码视频| 无码人妻精品一区二|