本發(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ó)別省市:
還沒(méi)有人留言評(píng)論。發(fā)表了對(duì)其他瀏覽者有用的留言會(huì)獲得科技券。