国产精品1024永久观看,大尺度欧美暖暖视频在线观看,亚洲宅男精品一区在线观看,欧美日韩一区二区三区视频,2021中文字幕在线观看

  • <option id="fbvk0"></option>
    1. <rt id="fbvk0"><tr id="fbvk0"></tr></rt>
      <center id="fbvk0"><optgroup id="fbvk0"></optgroup></center>
      <center id="fbvk0"></center>

      <li id="fbvk0"><abbr id="fbvk0"><dl id="fbvk0"></dl></abbr></li>

      嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法

      文檔序號:6556597閱讀:141來源:國知局
      專利名稱:嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法
      技術(shù)領(lǐng)域
      本發(fā)明涉及嵌入式系統(tǒng)動態(tài)存儲度技術(shù)領(lǐng)域,尤其是涉及一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法。
      背景技術(shù)
      嵌入式系統(tǒng)中,單任務(wù)操作系統(tǒng)內(nèi)存被分成兩部分,一部分給了操作系統(tǒng)的駐留程序,另一部分則分給了用戶進(jìn)程。而在多任務(wù)操作系統(tǒng)中,后一部分需要繼續(xù)細(xì)分給不同的進(jìn)程。這個工作是由操作系統(tǒng)的內(nèi)存管理機(jī)制實(shí)現(xiàn)的。一個操作系統(tǒng)的內(nèi)存管理效率對它的性能有著很重要的影響。一般而言,希望內(nèi)存在通過有效的分配之后能夠容納更多的任務(wù)以提高CPU的利用率。
      一般而言,內(nèi)存管理需要完成以下功能二次定址、保護(hù)、共享、邏輯組織和物理組織。首先,進(jìn)程調(diào)入調(diào)出內(nèi)存存在隨機(jī)性,我們需要內(nèi)存管理提供二次定址功能使得任務(wù)。再次調(diào)入內(nèi)存能夠和先前一樣正常運(yùn)行。其次,不同的進(jìn)程為了自己的正常運(yùn)行需要有自己的私有空間,內(nèi)存管理需要提供相應(yīng)的保護(hù)機(jī)制以容許這種私有空間的存在。再次,為了能夠協(xié)同完成更高級的功能,不同進(jìn)程之間需要有不同形式的交互,比如說訪問對方數(shù)據(jù),使用對方進(jìn)程代碼等等,而內(nèi)存管理所完成的共享功能可以保證順利實(shí)現(xiàn)。
      另外,由于計(jì)算機(jī)采用的是線性存儲設(shè)備,而計(jì)算機(jī)程序本身為了完成自身的邏輯任務(wù)就有了適合自己特點(diǎn)的邏輯劃分,如果操作系統(tǒng)或計(jì)算機(jī)硬件能夠順利實(shí)現(xiàn)這個邏輯劃分和線性存儲之間的順利轉(zhuǎn)換對程序本身實(shí)現(xiàn)的相對獨(dú)立性等方面不無裨益。因此內(nèi)存管理需要提供相應(yīng)的邏輯組織功能。
      許多重要的程序設(shè)計(jì)語言使用指針支持動態(tài)存儲管理。指針操作提高了語言的表現(xiàn)能力,增加了語言靈活性,同時也會產(chǎn)生大量動態(tài)存儲錯誤。例如脫引用空指針,修改只讀存儲空間,引用未定義或已釋放的存儲空間,存儲泄漏等。這些錯誤難以在程序調(diào)試階段檢測和定位,原因是(1)可能在程序多次執(zhí)行中才會出現(xiàn)一次;(2)其危害的顯現(xiàn)需要運(yùn)行相當(dāng)長的時期;(3)不同的平臺下程序有不同的行為,使其不易顯現(xiàn);(4)程序中大量的存儲分配和釋放操作以及復(fù)雜控制流程使錯誤不易定位。動態(tài)存儲錯誤會造成程序執(zhí)行結(jié)果錯誤,執(zhí)行速度降低,甚至程序崩潰。
      因此需要對動態(tài)存儲錯誤進(jìn)行檢測,以便進(jìn)行有效的錯誤檢測、定位和處理,提高系統(tǒng)的效率。

      發(fā)明內(nèi)容
      本發(fā)明的目的在于克服現(xiàn)有技術(shù)中的不足,提供一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法。
      本發(fā)明解決其技術(shù)問題采用的技術(shù)方案如下本發(fā)明提供了一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法,包括以下步驟(1)使用指針樹對控制流信息進(jìn)行記錄;所述的指針樹是一棵記錄程序動態(tài)使用存儲空間狀況的多叉樹,由兩種節(jié)點(diǎn)構(gòu)成入口結(jié)點(diǎn)和存儲節(jié)點(diǎn);入口節(jié)點(diǎn)是指針樹的根結(jié)點(diǎn),是訪問存儲節(jié)點(diǎn)的入口;存儲節(jié)點(diǎn)是指針樹的葉子結(jié)點(diǎn),每一個存儲節(jié)點(diǎn)與程序動態(tài)分配的一塊存儲空間對應(yīng);(2)使用指針樹對過程內(nèi)動態(tài)存儲錯誤進(jìn)行檢測①當(dāng)某個過程語法分析開始時,構(gòu)造此過程對應(yīng)指針樹的入口節(jié)點(diǎn)E和臨時存儲節(jié)點(diǎn)T;②在語法分析過程中,使用臨時存儲節(jié)點(diǎn)記錄節(jié)點(diǎn)T當(dāng)前控制流位置;③當(dāng)語法分析識別出一個存儲分配語句,為分配語句中的地址指針PI新建相應(yīng)的存儲節(jié)點(diǎn)S,將節(jié)點(diǎn)T的控制流位置拷貝給節(jié)點(diǎn)S,并記錄地址指針PI是否指向數(shù)組空間,并判斷是否存在內(nèi)存泄漏,如果有對此給出警告;
      ④當(dāng)分析過程識別出存儲釋放語句,將其分解,根據(jù)分解結(jié)果在指針樹上查找對應(yīng)節(jié)點(diǎn)N,如果和地址指針PI中有且僅有一個與數(shù)組空間對應(yīng),對此給出警告;比較節(jié)點(diǎn)N和節(jié)點(diǎn)T記錄的控制流位置,如果找不到節(jié)點(diǎn)N或者由于判斷值返回為真而無法刪除該節(jié)點(diǎn),說明該釋放操作失敗,對此給出警告;⑤該過程語法分析結(jié)束后,對其指針樹進(jìn)行分析;每個不連通的存儲節(jié)點(diǎn)代表失去索引的存儲空間,其他存儲節(jié)點(diǎn)代表在過程內(nèi)未被釋放的動態(tài)存儲空間,對這些存儲節(jié)點(diǎn)給出警告。
      作為本發(fā)明的一種改進(jìn),所述使用指針樹對控制流信息進(jìn)行記錄是通過以下方式實(shí)現(xiàn)的在存儲節(jié)點(diǎn)記錄其對應(yīng)存儲空間被分配時在控制流中所處的位置,使用如下的簡單形式表示該位在過程內(nèi),稱作用域包含某語句的所有分支和循環(huán)的總數(shù)為該語句的控制流深度,對于控制流深度為1的存儲分配語句,使用其所在的分支或循環(huán)的名字及分支或循環(huán)所在的行號的組合記錄此控制流,并將該組合稱為控制流標(biāo)記。
      本發(fā)明與背景技術(shù)相比,具有的有益的效果是嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法中,指針樹檢測法使用存儲節(jié)點(diǎn)表示程序動態(tài)分配的存儲空間,并記錄程序分配和釋放存儲空間時的控制流位置;利用指針樹上增刪節(jié)點(diǎn)的操作,模擬程序動態(tài)的存儲分配和釋放操作。指針樹的狀態(tài)反映了程序當(dāng)前使用動態(tài)存儲空間的狀況。
      (1)精確性。本發(fā)明通過定義指針樹,能夠精確的判斷出在程序編譯過程中,是否出現(xiàn)了內(nèi)存的泄漏等問題,如果出現(xiàn)了,能夠通過語法樹進(jìn)行精確的定位。
      (2)可靠性。本發(fā)明通過指針樹對程序編譯過程進(jìn)行分析,覆蓋了程序編譯的整個過程,能夠可靠全面的進(jìn)行動態(tài)存儲的檢測。


      附圖1是本發(fā)明指針樹檢測方法示意圖。
      具體實(shí)施方法下面結(jié)合附圖和實(shí)施例對本發(fā)明作進(jìn)一步的說明。
      一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法,其具體實(shí)施方式
      為1)嵌入式系統(tǒng)程序編譯中,對于指針樹的定義指針樹是一棵記錄程序動態(tài)使用存儲空間狀況的多叉樹,由兩種節(jié)點(diǎn)構(gòu)成入口結(jié)點(diǎn)和存儲節(jié)點(diǎn),入口節(jié)點(diǎn)是指針樹的根結(jié)點(diǎn),是訪問存儲節(jié)點(diǎn)的入口,存儲節(jié)點(diǎn)是指針樹的葉子結(jié)點(diǎn),每一個存儲節(jié)點(diǎn)與程序動態(tài)分配的一塊存儲空間對應(yīng);指針樹中,對于控制流信息的記錄存儲節(jié)點(diǎn)記錄了其對應(yīng)存儲空間被分配時在控制流中所處的位置,使用如下的簡單形式表示該位,在過程內(nèi),稱作用域包含某語句的所有分支和循環(huán)的總數(shù)為該語句的控制流深度,對于控制流深度為1的存儲分配語句,使用其所在的分支或循環(huán)的名字及分支或循環(huán)所在的行號的組合記錄此控制流,并將該組合稱為控制流標(biāo)記。
      例如某存儲分配語句處于第8行開始的while循環(huán)中,則相應(yīng)的控制流標(biāo)記為while_8。對于控制流深度大于1的存儲分配操作,使用*標(biāo)記將各個深度的控制流標(biāo)記自外向內(nèi)連接起來記錄控制流位置,*代表控制流進(jìn)入更深一層的流程。同一指針可能在控制流的不同分支中多次分配存儲空間,*標(biāo)記用于將這些控制流位置連接。
      指針樹利用存儲節(jié)點(diǎn)間的父子關(guān)系反映指針作用域的嵌套關(guān)系。
      在嵌入式系統(tǒng)常見動態(tài)存儲錯誤以及原因如下a)指向?qū)ο髷?shù)組空間的指針未使用Delete[]進(jìn)行釋放,造成除第一個數(shù)組元素外的析構(gòu)函數(shù)未能調(diào)用,產(chǎn)生存儲問題。
      b)空間釋放順序錯誤產(chǎn)生存儲錯誤。
      c)對同一指針多次分配存儲空間,或?qū)σ呀?jīng)分配空間的指針賦值,使最初分配的空間失去索引,產(chǎn)生內(nèi)存泄漏。
      d)程序中存在的復(fù)雜控制流程造成的存儲問題。
      以上動態(tài)存儲錯誤產(chǎn)生的原因多種多樣,但其本質(zhì)可以歸結(jié)為存儲空間的分配與釋放不匹配。這種不匹配在程序中體現(xiàn)為
      ·對象數(shù)組的指針未使用Delete[]進(jìn)行釋放,造成除數(shù)組第一個元素外的析構(gòu)函數(shù)未能調(diào)用;·指針和作用域嵌套在該指針?biāo)赶蚪Y(jié)構(gòu)內(nèi)的指針分配;·空間和釋放空間順序不匹配;·指針賦值語句造成的存儲泄漏;·程序復(fù)雜的控制流程造成的分配和釋放不匹配。
      2)使用指針樹檢測過程內(nèi)動態(tài)存儲錯誤的方法指針樹可以檢測1)中提到的a、b、c、d四種典型的過程內(nèi)動態(tài)存儲錯誤。指針樹是在語法分析過程中動態(tài)建立和使用的。最初只有一個入口節(jié)點(diǎn),隨著語法分析過程識別出存儲分配和釋放操作,在指針樹上相應(yīng)地增刪節(jié)點(diǎn)。
      利用指針樹檢測動態(tài)存儲錯誤需要使用detach(pt)和compare(a,b)兩個輔助函數(shù),參數(shù)pt為指針名,a和b是存儲節(jié)點(diǎn)。函數(shù)detach(pt)用于將作用域嵌套的指針分解。例如base-&gt;c指針名經(jīng)detach(pt)分解后,形成base和c兩個指針名。函數(shù)compare(a,b)根據(jù)存儲節(jié)點(diǎn)a和b的控制流位置分析a和b對應(yīng)的存儲空間能否在程序一次執(zhí)行中都被分配。函數(shù)compare(a,b)″)返回值為真,當(dāng)且僅當(dāng)a和b對應(yīng)的分配空間操作處于控制流的不同分支并且這兩個分支不在同一個循環(huán)中出現(xiàn)。
      ①當(dāng)某個過程語法分析開始時,構(gòu)造此過程對應(yīng)指針樹的入口節(jié)點(diǎn)E和臨時存儲節(jié)點(diǎn)T,T的各個域均為空。
      ②在語法分析過程中,使用臨時存儲節(jié)點(diǎn)記錄T當(dāng)前控制流位置。
      ③當(dāng)語法分析識別出一個存儲分配語句,為分配語句中的地址指針PI新建相應(yīng)的存儲節(jié)點(diǎn)S,將T的控制流位置拷貝給S,并記錄PI是否指向數(shù)組空間,利用detach(pt)函數(shù)將PI分解,根據(jù)分解結(jié)果在指針樹上找到S應(yīng)插入的位置,插入節(jié)點(diǎn)S。如果該位置已有節(jié)點(diǎn)N,使用compare(a,b)函數(shù)比較節(jié)點(diǎn)N和節(jié)點(diǎn)S的控制流位置,如果compare函數(shù)返回為真,用*標(biāo)記將S記錄的控制流位置連接在N的控制流之后。如果返回為假,說明可能在程序一次執(zhí)行中,對PI連續(xù)分配兩次空間而沒有將第一次分配的空間釋放,造成內(nèi)存泄漏,對此給出警告并判斷是否存在內(nèi)存泄漏。
      ④當(dāng)分析過程識別出存儲釋放語句delete PI或者delete[]PI,利用detach(pt)將其分解。根據(jù)分解結(jié)果在指針樹上查找對應(yīng)節(jié)點(diǎn)N,如果N和指針PI中有且僅有一個與數(shù)組空間對應(yīng),對此給出警告。利用compare(a,b)比較臨時節(jié)點(diǎn)T和節(jié)點(diǎn)N記錄的控制流位置,在compare返回為假的情況下,如果N控制流不包含*標(biāo)記,刪除節(jié)點(diǎn)N;如果包含*則刪除N中使compare(a,b)為假的控制流部分。如果找不到節(jié)點(diǎn)N或者由于compare返回為真而無法刪除該節(jié)點(diǎn),說明該釋放操作失敗,對此給出警告。
      ⑤該過程語法分析結(jié)束后,對其指針樹進(jìn)行分析;每個不連通的存儲節(jié)點(diǎn)代表失去索引的存儲空間,其他存儲節(jié)點(diǎn)代表在過程內(nèi)未被釋放的動態(tài)存儲空間,對這些存儲節(jié)點(diǎn)給出警告。
      權(quán)利要求
      1.一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法,其特征在于,包括以下步驟(1)使用指針樹對控制流信息進(jìn)行記錄;所述的指針樹是一棵記錄程序動態(tài)使用存儲空間狀況的多叉樹,由兩種節(jié)點(diǎn)構(gòu)成入口結(jié)點(diǎn)和存儲節(jié)點(diǎn);入口節(jié)點(diǎn)是指針樹的根結(jié)點(diǎn),是訪問存儲節(jié)點(diǎn)的入口;存儲節(jié)點(diǎn)是指針樹的葉子結(jié)點(diǎn),每一個存儲節(jié)點(diǎn)與程序動態(tài)分配的一塊存儲空間對應(yīng);(2)使用指針樹對過程內(nèi)動態(tài)存儲錯誤進(jìn)行檢測①當(dāng)某個過程語法分析開始時,構(gòu)造此過程對應(yīng)指針樹的入口節(jié)點(diǎn)E和臨時存儲節(jié)點(diǎn)T;②在語法分析過程中,使用臨時存儲節(jié)點(diǎn)記錄節(jié)點(diǎn)T當(dāng)前控制流位置;③當(dāng)語法分析識別出一個存儲分配語句,為分配語句中的地址指針PI新建相應(yīng)的存儲節(jié)點(diǎn)S,將節(jié)點(diǎn)T的控制流位置拷貝給節(jié)點(diǎn)S,并記錄地址指針PI是否指向數(shù)組空間,并判斷是否存在內(nèi)存泄漏,如果有對此給出警告;④當(dāng)分析過程識別出存儲釋放語句,將其分解,根據(jù)分解結(jié)果在指針樹上查找對應(yīng)節(jié)點(diǎn)N,如果和地址指針PI中有且僅有一個與數(shù)組空間對應(yīng),對此給出警告;比較節(jié)點(diǎn)N和節(jié)點(diǎn)T記錄的控制流位置,如果找不到節(jié)點(diǎn)N或者由于判斷值返回為真而無法刪除該節(jié)點(diǎn),說明該釋放操作失敗,對此給出警告;⑤該過程語法分析結(jié)束后,對其指針樹進(jìn)行分析;每個不連通的存儲節(jié)點(diǎn)代表失去索引的存儲空間,其他存儲節(jié)點(diǎn)代表在過程內(nèi)未被釋放的動態(tài)存儲空間,對這些存儲節(jié)點(diǎn)給出警告。
      2.根據(jù)權(quán)利要求1所述的嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法,其特征在于,所述使用指針樹對控制流信息進(jìn)行記錄是通過以下方式實(shí)現(xiàn)的在存儲節(jié)點(diǎn)記錄其對應(yīng)存儲空間被分配時在控制流中所處的位置,使用如下的簡單形式表示該位在過程內(nèi),稱作用域包含某語句的所有分支和循環(huán)的總數(shù)為該語句的控制流深度,對于控制流深度為1的存儲分配語句,使用其所在的分支或循環(huán)的名字及分支或循環(huán)所在的行號的組合記錄此控制流,并將該組合稱為控制流標(biāo)記。
      全文摘要
      本發(fā)明涉及嵌入式系統(tǒng)動態(tài)存儲度技術(shù)領(lǐng)域,旨在提供一種嵌入式系統(tǒng)動態(tài)存儲錯誤靜態(tài)檢測的實(shí)現(xiàn)方法。該方法包括使用指針樹對控制流信息進(jìn)行記錄和使用指針樹對過程內(nèi)動態(tài)存儲錯誤進(jìn)行檢測。本發(fā)明具有精確性和可靠性。通過定義指針樹,能夠精確的判斷出在程序編譯過程中,是否出現(xiàn)了內(nèi)存的泄漏等問題,如果出現(xiàn)了,能夠通過語法樹進(jìn)行精確的定位。通過指針樹對程序編譯過程進(jìn)行分析,覆蓋了程序編譯的整個過程,能夠可靠全面的進(jìn)行動態(tài)存儲的檢測。
      文檔編號G06F11/36GK1905076SQ20061005222
      公開日2007年1月31日 申請日期2006年6月30日 優(yōu)先權(quán)日2006年6月30日
      發(fā)明者陳天洲, 謝斌, 趙懿, 王祥生 申請人:浙江大學(xué)
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
      1