国产精品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>

      函式分析方法與內(nèi)存裝置與流程

      文檔序號(hào):11250725閱讀:432來源:國知局
      函式分析方法與內(nèi)存裝置與流程

      本發(fā)明有關(guān)于一種函式分析方法與內(nèi)存裝置,特別有關(guān)于一種能夠分析普通函式與api函式之間的對(duì)應(yīng)關(guān)系、普通函式之間的呼叫關(guān)系、以及檢視是否有循環(huán)發(fā)生的函式分析方法與內(nèi)存裝置。



      背景技術(shù):

      一般而言,內(nèi)存裝置會(huì)儲(chǔ)存許多內(nèi)部?jī)?chǔ)存程序(isp,internalstoredprogram)。在一塊內(nèi)存中通常儲(chǔ)存了使用于不同功能模塊的內(nèi)部?jī)?chǔ)存程序。當(dāng)用戶要使用某個(gè)功能模塊時(shí),則上述功能模塊的內(nèi)部?jī)?chǔ)存程序的程序代碼會(huì)被加載到此內(nèi)存,以執(zhí)行被加載的程序代碼并且指定應(yīng)用程序編程接口(api,applicationprogramminginterface)函式(function)所對(duì)應(yīng)的普通函式。然而,內(nèi)存的儲(chǔ)存容量是有限的。如果上述普通函式之間的呼叫關(guān)系具有循環(huán)(loop),就會(huì)影響內(nèi)存裝置的訪問時(shí)間與效能。

      然而,搜尋上一層函式的字符串來找出循環(huán)會(huì)耗費(fèi)許多時(shí)間。此外,現(xiàn)行的函式管理方法無法直接藉由api函式分析出內(nèi)部?jī)?chǔ)存程序中的普通函式之間的上下呼叫關(guān)系而找出循環(huán)。因此,需要一種能夠分析普通函式與api函式之間的對(duì)應(yīng)關(guān)系、普通函式之間的呼叫關(guān)系以找出循環(huán)的函式分析方法,以提升內(nèi)存裝置的效能。



      技術(shù)實(shí)現(xiàn)要素:

      為了解決上述問題,本發(fā)明提出一種藉由編譯程序(compiler)的映像檔案(mapfile)分析普通函式與api函式之間的對(duì)應(yīng)關(guān)系、以及分析普通函式之間的呼叫關(guān)系是否具有循環(huán)的函式管理方法,以提升內(nèi)存裝置的效能。此外,本發(fā)明所提出的函式分析方法以二維數(shù)組來仿真普通函式的呼叫以及數(shù)狀搜尋,讓使用者與研發(fā)人員能夠快速且有效率的找出函數(shù)調(diào)用關(guān)系中的循環(huán),避免因?yàn)檠h(huán)而影響效能。

      本發(fā)明的一實(shí)施例提供了一種應(yīng)用于內(nèi)存裝置的函式分析方法,包括分析內(nèi)存裝置之至少一api(applicationprogramminginterface)函式與至少一普通函式的對(duì)應(yīng)關(guān)系;藉由對(duì)應(yīng)關(guān)系分析至少一普通函式之間的呼叫關(guān)系;建立二維數(shù)組以分析呼叫關(guān)系中是否具有循環(huán)(loop)。當(dāng)至少一普通函式中的一普通函數(shù)調(diào)用另一普通函式時(shí),檢查被呼叫的普通函式的名稱,是否相同于普通函式的名稱,以及是否相同于所有呼叫普通函式的普通函式的名稱。在分析呼叫關(guān)系中是否具有循環(huán)的步驟中,當(dāng)被呼叫的普通函式的名稱,相同于普通函式的名稱,或是相同于所有呼叫普通函式的普通函式的名稱,則表示呼叫關(guān)系具有循環(huán)。

      此外,上述二維數(shù)組的第一維數(shù)組是用以記錄具有呼叫關(guān)系的普通函式以及被呼叫的普通函式,二維數(shù)組的第二維數(shù)組用以分別記錄普通函式可呼叫的全部普通函式,以及記錄被呼叫的普通函式可呼叫的全部普通函式。再者,二維數(shù)組更記錄普通函式以及被呼叫的普通函式可呼叫的全部普通函式的數(shù)量,并且記錄被呼叫的普通函式是普通函式所呼叫的全部普通函式中的第幾個(gè)普通函式。

      在分析內(nèi)存裝置的至少一api函式與至少一普通函式的對(duì)應(yīng)關(guān)系中,當(dāng)至少一api函式中的任一者對(duì)應(yīng)到至少一普通函式,從普通函式數(shù)據(jù)庫以及api函式數(shù)據(jù)庫中取得具有對(duì)應(yīng)關(guān)系的普通函式以及api函式,于普通函式數(shù)據(jù)庫中標(biāo)記普通函式對(duì)應(yīng)api函式,并且將普通函式與api函式的對(duì)應(yīng)關(guān)系記錄于一對(duì)應(yīng)關(guān)系數(shù)據(jù)庫。在分析至少一普通函式之間的呼叫關(guān)系的步驟中,當(dāng)普通函式所呼叫的函式為普通函式時(shí),將普通函式與被普通函數(shù)調(diào)用的普通函式之間的呼叫關(guān)系記錄于一呼叫關(guān)系數(shù)據(jù)庫。當(dāng)普通函式所呼叫的函式為api函式時(shí),藉由對(duì)應(yīng)關(guān)系數(shù)據(jù)庫取得被呼叫的api函式所對(duì)應(yīng)的普通函式,將普通函式與api函式所對(duì)應(yīng)的普通函式之間的呼叫關(guān)系記錄于呼叫關(guān)系數(shù)據(jù)庫。

      本發(fā)明的一實(shí)施例提供了一種具有函式分析功能的內(nèi)存裝置,包括語法分析(parsing)模塊、數(shù)組模塊與分析模塊。語法分析模塊分析內(nèi)存裝置的至少一api函式與至少一普通函式的對(duì)應(yīng)關(guān)系,并且藉由對(duì)應(yīng)關(guān)系分析至少一普通函式之間的呼叫關(guān)系。數(shù)組模塊建立二維數(shù)組以記錄呼叫關(guān)系。分析模塊分析呼叫關(guān)系中是否具有循環(huán)。當(dāng)至少一普通函式中的一普通函數(shù)調(diào)用另一普通函式時(shí),檢查被呼叫的普通函式的名稱,是否相同于普通函式的名稱,以及是否相同于所有呼叫普通函式的普通函式的名稱。

      關(guān)于本發(fā)明其他附加的特征與優(yōu)點(diǎn),此領(lǐng)域的熟悉技術(shù)人士,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可根據(jù)本案實(shí)施方法中所揭示的內(nèi)存裝置及其函式分析方法。

      附圖說明

      圖1是顯示根據(jù)本發(fā)明一實(shí)施例所述的內(nèi)存裝置的示意圖;

      圖2是顯示根據(jù)本發(fā)明一實(shí)施例所述的各種數(shù)據(jù)庫的示意圖;

      圖3是顯示根據(jù)本發(fā)明一實(shí)施例所述的函式分析方法的流程圖;

      圖4是顯示根據(jù)本發(fā)明一實(shí)施例所述的二維數(shù)組的示意圖;

      圖5是顯示根據(jù)本發(fā)明一實(shí)施例所述的函式分析方法的流程圖;

      圖6a與6b是顯示根據(jù)本發(fā)明一實(shí)施例所述的尋找循環(huán)的流程圖。

      符號(hào)說明

      10~內(nèi)存裝置;

      110~映像檔案;

      120~原始碼;

      130~語法分析模塊;

      140~數(shù)據(jù)庫模塊;

      150a、150b、150c、150d、150e~數(shù)據(jù)庫;

      160~數(shù)組目標(biāo);

      170~數(shù)組模塊;

      180~分析模塊;

      s500-s510、s600-s622~步驟

      具體實(shí)施方式

      以下的揭示內(nèi)容提供許多不同的實(shí)施例或范例以實(shí)施本發(fā)明的不同特征。以下的揭示內(nèi)容敘述各個(gè)構(gòu)件及其排列方式的特定范例,以簡(jiǎn)化說明。當(dāng)然,這些特定的范例并非用以限定。例如,若是本揭露書敘述了一第一特征形成于一第二特征之上或上方,即表示其可能包含上述第一特征與上述第二特征是直接接觸的實(shí)施例,亦可能包含了有附加特征形成于上述第一特征與上述第二特征之間,而使上述第一特征與第二特征可能未直接接觸的實(shí)施例。另外,以下揭露書不同范例可能重復(fù)使用相同的參考符號(hào)及/或標(biāo)記。這些重復(fù)為了簡(jiǎn)化與清晰的目的,并非用以限定所討論的不同實(shí)施例及/或結(jié)構(gòu)之間有特定的關(guān)系。

      圖1是顯示根據(jù)本發(fā)明一實(shí)施例所述的內(nèi)存裝置10的示意圖。內(nèi)存裝置10可以是隨機(jī)存取內(nèi)存(randomaccessmemory,ram)、只讀存儲(chǔ)器(readonlymemory,rom)、閃存(flash)、硬盤、軟盤、磁性內(nèi)存等。如圖1所示,內(nèi)存裝置10包括映像檔案(mapfile)110、原始碼(sourcecode)120、語法分析(parsing)模塊130、數(shù)據(jù)庫(database)模塊140、多個(gè)數(shù)據(jù)庫150a~150e、數(shù)組目標(biāo)160、數(shù)組模塊170以及分析模塊180。上述語法分析模塊130、數(shù)據(jù)庫模塊140、數(shù)組模塊170以及分析模塊180可以利用電路硬件或嵌入式軟件碼加以實(shí)現(xiàn),該嵌入式軟件碼可以由一處理器存取以及執(zhí)行。此外,內(nèi)存裝置10可配置于一電子裝置中。舉例而言,上述電子裝置可以為手機(jī)、平板計(jì)算機(jī)、筆記本電腦或是pda等行動(dòng)電子裝置,或是桌面計(jì)算機(jī)、服務(wù)器等電子裝置。因此,內(nèi)存裝置10可用以儲(chǔ)存電子裝置的各種功能所需要的函式及其原始碼等。

      在一實(shí)施例中,映像檔案110來自一編譯程序(compiler)。語法分析模塊130藉由映像檔案110取得多個(gè)函式(function),以及藉由映像檔案110對(duì)該內(nèi)存裝置10中的至少一原始碼120進(jìn)行語法分析。此外,上述函式包括至少一普通函式與至少一應(yīng)用程序編程接口(api,applicationprogramminginterface)函式。詳細(xì)而言,api函式主要是作為溝通中介之用,不干涉原始碼120的執(zhí)行動(dòng)作。api函式的優(yōu)點(diǎn)在于讓程序開發(fā)人員利用例程功能取代底層的原始碼120,加速開發(fā)流程。相對(duì)于api函式,普通函式則是真實(shí)函式(realfunction)。一般而言,一個(gè)api函式可以對(duì)應(yīng)一個(gè)或多個(gè)api函式。因此,記錄與分析普通函式與api函式之間的對(duì)應(yīng)關(guān)系,有助于研發(fā)人員進(jìn)行開發(fā)并且提升內(nèi)存裝置10的效能。

      值得注意的是,映像檔案110包括至少一api函式與至少一普通函式的名稱。在一實(shí)施例中,可藉由不同的命名方式來區(qū)別api函式以及普通函式。舉例來說,如果函式名稱以api作為開頭者就是api函式,如果函式名稱不是以api作為開頭者就是普通函式。因此,語法分析模塊130能夠藉由映像檔案110,對(duì)內(nèi)存裝置10會(huì)使用到的api函式與普通函式的原始碼120進(jìn)行語法分析。在一實(shí)施例中,實(shí)際上不會(huì)被使用的函式就不需要進(jìn)行語法分析,以增加語法分析模塊130的分析效力。

      此外,數(shù)據(jù)庫模塊140系藉由該映射檔案110建立至少一普通函式的普通函式數(shù)據(jù)庫(數(shù)據(jù)庫150a)、以及至少一api函式的api函式數(shù)據(jù)庫(數(shù)據(jù)庫150b)。圖2是顯示根據(jù)本發(fā)明一實(shí)施例所述的各種數(shù)據(jù)庫150a~150d的示意圖。如圖2所示,普通函式數(shù)據(jù)庫150a記錄普通函式的索引(index字段)、普通函式的名稱(name字段)、普通函式所呼叫的函式數(shù)量(calling字段)、呼叫該普通函式的函式數(shù)量(called字段)、及/或普通函式是否對(duì)應(yīng)api函式等(alternative字段)。此外,api函式數(shù)據(jù)庫150b系記錄api函式的名稱(name字段)。

      在圖2所示的普通函式數(shù)據(jù)庫中,每個(gè)普通函式都有一個(gè)索引編號(hào)。舉例而言,索引編號(hào)122的函式名稱為isp_nf_ftl_cleanpart2n3,并且此普通函數(shù)調(diào)用了3個(gè)普通函式(calling字段為3)、被6個(gè)普通函式所呼叫(called字段為6)、以及具有對(duì)應(yīng)的api函式(alternative字段為1)。再者,索引編號(hào)124的函式名稱為isp_nf_ftl_erase_trim_modeentry,并且此普通函數(shù)調(diào)用了1個(gè)普通函式(calling字段為1)、被7個(gè)普通函式所呼叫(called字段為7)、以及沒有對(duì)應(yīng)的api函式(alternative字段為0)。此外,圖2所示的api函式數(shù)據(jù)庫記錄了api函式的名稱(name字段)。舉例而言,索引編號(hào)0的api函式名稱為api_ctl_errhandle,索引編號(hào)1的api函式名稱為api_ctl_funcsel。

      在一實(shí)施例中,語法分析模塊130進(jìn)行第一次語法分析找出普通函式與api函式的對(duì)應(yīng)關(guān)系,并且數(shù)據(jù)庫模塊140建立該至少一api函式與該至少一普通函式的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫(數(shù)據(jù)庫150c)。在圖2所示的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫中,記錄了api函式的名稱(name字段)及其所對(duì)應(yīng)的一個(gè)以上的普通函式(f-index字段)。每個(gè)索引編號(hào)代表一個(gè)對(duì)應(yīng)關(guān)系。舉例而言,索引編號(hào)0的字段記錄了名稱為api_nf_ftl_reportexe的api函式對(duì)應(yīng)到編號(hào)為128的普通函式,索引編號(hào)1的字段記錄了名稱為api_nf_ftl_reportexe的api函式對(duì)應(yīng)到編號(hào)為130的普通函式。由此可知,api_nf_ftl_reportexe的api函式系對(duì)應(yīng)到多個(gè)普通函式。此外,索引編號(hào)4的字段記錄了名稱為api_nf_pftl_read_syspage_retry的api函式對(duì)應(yīng)到編號(hào)210的普通函式。由此可知,api_nf_pftl_read_syspage_retry之a(chǎn)pi函式系對(duì)應(yīng)到1個(gè)普通函式。

      在一實(shí)施例中,語法分析模塊130進(jìn)行第二次語法分析以找出普通函式之間的上下呼叫關(guān)系,并且數(shù)據(jù)庫模塊140建立至少一普通函式之間的呼叫關(guān)系數(shù)據(jù)庫(數(shù)據(jù)庫150d)。圖2所示的呼叫關(guān)系數(shù)據(jù)庫所記錄的是普通函式的編號(hào)。每個(gè)索引編號(hào)代表一個(gè)呼叫關(guān)系,包含了呼叫者以及被呼叫者的普通函式的編號(hào)。舉例而言,索引編號(hào)0的字段記錄了編號(hào)為138普通函數(shù)調(diào)用編號(hào)為113的普通函式,索引編號(hào)1的字段記錄了編號(hào)為138普通函數(shù)調(diào)用編號(hào)為110的普通函式,索引編號(hào)2的字段記錄了編號(hào)為105普通函數(shù)調(diào)用編號(hào)為103的普通函式。由此可知,編號(hào)138的普通函數(shù)調(diào)用了2個(gè)普通函式,而編號(hào)105的普通函數(shù)調(diào)用了1個(gè)普通函式。

      詳細(xì)而言,當(dāng)語法分析模塊130判斷多個(gè)api函式中的任一者對(duì)應(yīng)到一普通函式時(shí),數(shù)據(jù)庫模塊140從普通函式數(shù)據(jù)庫150a以及api函式數(shù)據(jù)庫150b中取得具有對(duì)應(yīng)關(guān)系的該普通函式以及該api函式。然后,數(shù)據(jù)庫模塊140于普通函式數(shù)據(jù)庫150a之中標(biāo)記該普通函式對(duì)應(yīng)該api函式,并且將該普通函式與該api函式的對(duì)應(yīng)關(guān)系記錄于對(duì)應(yīng)關(guān)系數(shù)據(jù)庫150c。此外,當(dāng)語法分析模塊130判斷原始碼120的普通函式所呼叫的函式為普通函式時(shí),數(shù)據(jù)庫模塊140將該普通函式與被該普通函數(shù)調(diào)用的普通函式之間的呼叫關(guān)系記錄于呼叫關(guān)系數(shù)據(jù)庫150d。

      另一方面,當(dāng)語法分析模塊130判斷原始碼120的普通函式所呼叫的函式為apli函式時(shí),數(shù)據(jù)庫模塊140會(huì)藉由對(duì)應(yīng)關(guān)系數(shù)據(jù)庫150c取得該呼叫的api函式所對(duì)應(yīng)的普通函式,以及將該普通函式與該api函式所對(duì)應(yīng)的普通函式之間的呼叫關(guān)系記錄于呼叫關(guān)系數(shù)據(jù)庫150d。本發(fā)明所提的之內(nèi)存裝置10及其函式管理方法,能夠分析普通函式與api函式之間的對(duì)應(yīng)關(guān)系、以及普通函式之間的呼叫關(guān)系的函式管理方法,因而提升內(nèi)存裝置10的效能并且方便管理內(nèi)存裝置10。

      此外,數(shù)組模塊170建立二維數(shù)組,并且依據(jù)數(shù)組目標(biāo)160而分析二維數(shù)組。在一實(shí)施例中,數(shù)組目標(biāo)160找出執(zhí)行函式時(shí)所產(chǎn)生的循環(huán)。因此,數(shù)組模塊170建立二維數(shù)組,并且藉由呼叫關(guān)系數(shù)據(jù)庫150d分析呼叫關(guān)系中是否具有循環(huán)(loop)。詳細(xì)而言,當(dāng)至少一普通函式中的一普通函數(shù)調(diào)用另一普通函式時(shí),分析模塊180藉由二維數(shù)組檢查該被呼叫的普通函式的名稱,是否相同于該普通函式的名稱,以及是否相同于所有呼叫該普通函式的普通函式的名稱。當(dāng)該被呼叫的普通函式的名稱,相同于該普通函式的名稱,或是相同于所有呼叫該普通函式的普通函式的名稱,則表示普通函式的呼叫關(guān)系具有循環(huán)。值得注意的是,由于分析模塊180比較的是普通函式的名稱,不是比較字符串,因此能夠具有較快速的比較速度,有效率的找出循環(huán)。

      圖3是顯示根據(jù)本發(fā)明一實(shí)施例所述的函式管理方法的流程圖。在步驟s300,語法分析模塊130加載編譯程序的映像檔案110以取得多個(gè)普通函式與api函式,并且數(shù)據(jù)庫模塊140建立普通函式數(shù)據(jù)庫150a與api函式數(shù)據(jù)庫150b。在步驟s302中,語法分析模塊130進(jìn)行第一次語法分析,數(shù)據(jù)庫模塊140根據(jù)第一次語法分析的結(jié)果而建立api函式與普通函式之間的對(duì)應(yīng)關(guān)系數(shù)據(jù)庫150c。然后在步驟s304,語法分析模塊130進(jìn)行第二次語法分析,數(shù)據(jù)庫模塊140根據(jù)第二次語法分析的結(jié)果而建立普通函式之間的呼叫關(guān)系數(shù)據(jù)庫150d。值得注意的是,上述各種數(shù)據(jù)庫150a~150d系彼此關(guān)聯(lián)并且實(shí)時(shí)更新的。當(dāng)呼叫關(guān)系數(shù)據(jù)庫150d新增一組普通函式的呼叫關(guān)系時(shí),普通函式數(shù)據(jù)庫150a中的上述普通函式的calling字段或called字段的數(shù)值也會(huì)同步更新。然后在步驟s306中,數(shù)組模塊170建立二維數(shù)組以記錄普通函式之間的呼叫關(guān)系。然后執(zhí)行步驟s308,分析模塊180藉由數(shù)組模塊170所建立的二維數(shù)組,分析呼叫關(guān)系是否具有循環(huán)。

      圖4是顯示根據(jù)本發(fā)明一實(shí)施例所述的二維數(shù)組的示意圖。如圖4所示,二維數(shù)組包括2個(gè)維度的數(shù)組,分別為x軸維度與y軸維度。二維數(shù)組的第一維數(shù)組(x軸方向)用以記錄具有呼叫關(guān)系的普通函式以及被呼叫的普通函式。二維數(shù)組的第二維數(shù)組(y軸方向)用以分別記錄該普通函式可呼叫的全部普通函式,以及記錄該被呼叫的普通函式所呼叫的全部普通函式。再者,二維數(shù)組更記錄該普通函式以及該被呼叫的普通函式可呼叫的全部普通函式的數(shù)量,并且記錄該被呼叫的普通函式是該普通函式可呼叫的全部普通函式中的第幾個(gè)普通函式。

      詳細(xì)而言,圖4所示的f0、f1、f00、f02、f10等為普通函式的名稱。f0函式、f1函式、f8函式和f9函式的階層數(shù)值分別為0、1、8和9。換言之,f0函數(shù)調(diào)用f1函式,f1函式透過其他普通函數(shù)調(diào)用f8函式,然后f8函數(shù)調(diào)用f9函式。對(duì)于函式f0而言,其二維數(shù)組記錄了f0可呼叫的f00函式、f01函式以及f02函式。對(duì)于函式f1而言,其二維數(shù)組記錄了f1可呼叫的f10函式、f11函式、f12函式以及f13函式。此外,二維數(shù)組也記錄了f0函式具有f00、f01、f02等3個(gè)普通函式,并且此3個(gè)普通函式分別具有其序號(hào)。在一實(shí)施例中,排序第1的f00函式實(shí)際上被函式f0所呼叫,則f00函式被記錄于函式f1的字段中,表示f00函式被f0函式所呼叫。在一實(shí)施例中,二維數(shù)組也記錄了f8函式具有f80、f81等多個(gè)普通函式,并且上述普通函式分別具有其序號(hào)。排序第2的f81函式實(shí)際上被函式f8所呼叫,則f81函式被記錄于函式f9的字段中。因此,隨著內(nèi)存裝置10進(jìn)行數(shù)據(jù)的存取,此二維數(shù)組的內(nèi)容是動(dòng)態(tài)變動(dòng)的。

      值得注意的是,圖4所示之f0、f1、f00、f02、f10也可以是表格150a~150d中的普通函式的索引編號(hào)(index)。在呼叫下一階層的函式時(shí),就可以檢查二維數(shù)組上是否有相同的索引編號(hào)。如果發(fā)現(xiàn)相同的索引編號(hào),則表示有循環(huán)發(fā)生。然后,分析模塊180將具有循環(huán)的該普通函式的索引編號(hào)或名稱傳送給數(shù)據(jù)庫模塊140,并且數(shù)據(jù)庫模塊將該普通函式的索引編號(hào)或名稱記錄于循環(huán)數(shù)據(jù)庫150e。因此,藉由本發(fā)明所提供的函式分析方法所建立的二維數(shù)組,能夠快速找出會(huì)產(chǎn)生循環(huán)的函式,進(jìn)而加以記錄與管理,避免因?yàn)檠h(huán)而影響到內(nèi)存裝置10的訪問速度與效能。

      圖5是顯示根據(jù)本發(fā)明一實(shí)施例所述的函式分析方法的流程圖。圖5所示的函式分析方法是由數(shù)組模塊170及/或分析模塊180所執(zhí)行。在步驟s500中,加載源頭函式并且設(shè)定階層數(shù)值為-1。舉例而言,源頭函式為main函式。在步驟s502,設(shè)定指標(biāo)數(shù)值為0。上述指標(biāo)數(shù)值用以標(biāo)示目前的普通函式。然后執(zhí)行步驟s504,分析模塊180判斷指針數(shù)值是否小于普通函數(shù)的數(shù)量。如果指針數(shù)值并未小于普通函數(shù)的數(shù)量,則執(zhí)行步驟s512結(jié)束流程。如果指針數(shù)值小于普通函數(shù)的數(shù)量,則執(zhí)行步驟s506。

      在步驟s506中,分析模塊180判斷目前的普通函式是否為源頭函式。如果目前的普通函式不是源頭函式,則執(zhí)行步驟s510。如果目前的普通函式為源頭函式,則執(zhí)行步驟s508。在步驟s508中,數(shù)組模塊170建立二維數(shù)組以記錄普通函式之間的呼叫關(guān)系,遞增階層數(shù)值,并且檢查是否具有循環(huán)。然后,執(zhí)行步驟s510來遞增指標(biāo)數(shù)值,然后再執(zhí)行步驟s504。

      圖6a與圖6b是顯示根據(jù)本發(fā)明一實(shí)施例所述的尋找循環(huán)的流程圖。圖6a與6b所示的函式分析方法是由數(shù)組模塊170及/或分析模塊180所執(zhí)行。在步驟s600中,判斷階層數(shù)值是否大于或等于0。如果階層數(shù)值沒有大于或等于0,則執(zhí)行步驟s622結(jié)束流程。如果階層數(shù)值大于或等于0,則執(zhí)行步驟s602判斷是否新增目前普通函式的下一階層的普通函式。如果沒有新增目前普通函式的下一階層的普通函式,執(zhí)行步驟s612。如果新增目前普通函式的下一階層的普通函式,則執(zhí)行步驟s604。在步驟s604中,是否藉由檢查目前普通函式的所有上階層函式而找到循環(huán)。如果檢查目前普通函式的所有上階層函式而沒有找到循環(huán),則執(zhí)行步驟s608。如果檢查目前普通函式的所有上階層函式而找到循環(huán),則執(zhí)行步驟s606。

      在步驟s606中,將具有循環(huán)的該目前普通函式記錄于循環(huán)數(shù)據(jù)庫150e。然后執(zhí)行步驟s612。在步驟s608中,準(zhǔn)備取得目前普通函式可呼叫的普通函式,然后執(zhí)行步驟s609判斷是否具有可呼叫的普通函式。如果沒有可呼叫的普通函式,則執(zhí)行步驟s612。如果具有可呼叫的普通函式,則執(zhí)行步驟s610,將被呼叫的普通函式加載二維數(shù)組的第二維數(shù)組,記錄被呼叫的普通函式的數(shù)量,設(shè)定目前函式的現(xiàn)行數(shù)值為0。詳細(xì)而言,現(xiàn)行數(shù)值系用以標(biāo)示目前普通函式的下一階層的普通函式是第幾個(gè)普通函式。然后執(zhí)行步驟s612,檢視下一階層的普通函式。

      然后,執(zhí)行步驟s614,判斷現(xiàn)行數(shù)值是否小于被呼叫的普通函式的數(shù)量。如果現(xiàn)行數(shù)值沒有小于被呼叫的普通函式的數(shù)量,執(zhí)行步驟s618。如果現(xiàn)行數(shù)值小于被呼叫的普通函式的數(shù)量,執(zhí)行步驟s616。在步驟s616中,將被呼叫的普通函式加載二維數(shù)組的第一維數(shù)組中的目前普通函式的下一階層,遞增階層數(shù)值與目前普通函式的現(xiàn)行數(shù)值,設(shè)定下一階層的普通函式的現(xiàn)行數(shù)值為0。然后,在步驟s618中,判斷是否所有被呼叫的普通函式都載入目前普通函式的下一階層。如果所有被呼叫的普通函式都加載目前普通函式的下一階層,則執(zhí)行步驟s620,遞減階層數(shù)值,設(shè)定目前普通函式的現(xiàn)行數(shù)值為0。如果并非所有被呼叫的普通函式都載入目前普通函式的下一階層,則再次執(zhí)行步驟s600。

      本發(fā)明所提出的內(nèi)存裝置10及其函式分析方法,能夠記錄普通函式與api函式之間的對(duì)應(yīng)關(guān)系、以及分析普通函式之間的呼叫關(guān)系是否具有循環(huán),以提升內(nèi)存裝置10的效能。此外,本發(fā)明所提出的函式分析方法系以二維數(shù)組來仿真普通函式的呼叫以及數(shù)狀搜尋,讓使用者與研發(fā)人員能夠快速且有效率的找出函數(shù)調(diào)用關(guān)系中的循環(huán),避免因?yàn)檠h(huán)而影響效能。

      在本說明書以及申請(qǐng)專利范圍中的序數(shù),例如“第一”、“第二”、“第三”等等,彼此之間并沒有順序上的先后關(guān)系,其僅用于標(biāo)示區(qū)分兩個(gè)具有相同名字的不同組件。本發(fā)明雖以較佳實(shí)施例揭示如上,然其并非用以限定本發(fā)明的范圍,任何熟悉本技術(shù)領(lǐng)域者,在不脫離本發(fā)明的精神和范圍內(nèi),當(dāng)可做些許的更動(dòng)與潤飾,因此本發(fā)明的保護(hù)范圍當(dāng)由權(quán)利要求書為準(zhǔn)。

      當(dāng)前第1頁1 2 
      網(wǎng)友詢問留言 已有0條留言
      • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
      1