函數(shù)調(diào)用方法、裝置和終端設(shè)備的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及計算機技術(shù)領(lǐng)域,特別涉及一種函數(shù)調(diào)用方法、裝置和終端設(shè)備。
【背景技術(shù)】
[0002]函數(shù)的調(diào)用和被調(diào)用是軟件編程時常用的方法,通過調(diào)用函數(shù)可以實現(xiàn)模塊化程序設(shè)計,使程序結(jié)構(gòu)更加清晰,并且每個模塊都可以獨立設(shè)計,便于實現(xiàn)大程序。
[0003]在函數(shù)運行時,將函數(shù)的數(shù)據(jù)和指令從主存加載到緩存,當(dāng)在運行當(dāng)前函數(shù)的過程中發(fā)生函數(shù)調(diào)用時,PC (Program Counter,程序計數(shù)器)指針從主調(diào)函數(shù)跳向被調(diào)用函數(shù),開始運行被調(diào)用函數(shù),被調(diào)用函數(shù)在運行時,需要將被調(diào)用函數(shù)的數(shù)據(jù)和指令加載到緩存中。
[0004]在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:
[0005]在加載被調(diào)用函數(shù)的數(shù)據(jù)和指令的過程或被調(diào)用函數(shù)的運行過程中,主調(diào)函數(shù)的數(shù)據(jù)和指令均可能會被替換,當(dāng)被調(diào)用函數(shù)運行結(jié)束,PC指針返回到主調(diào)函數(shù)時,可能出現(xiàn)緩存缺失(Cache miss),需要重新將主調(diào)函數(shù)的數(shù)據(jù)和指令加載到緩存,降低了程序運行的速度,影響操作性能,提高了 CPU的負載率。
【發(fā)明內(nèi)容】
[0006]為了解決出現(xiàn)緩存缺失的問題,本發(fā)明實施例提供了一種函數(shù)調(diào)用的方法、裝置和終端設(shè)備。所述技術(shù)方案如下:
[0007]第一方面,提供了一種函數(shù)調(diào)用方法,所述方法包括:
[0008]當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中;
[0009]根據(jù)所述調(diào)用函數(shù)指令調(diào)用第二函數(shù);
[0010]當(dāng)所述第二函數(shù)運行結(jié)束時,將所述第一函數(shù)的數(shù)據(jù)和指令解鎖。
[0011]假設(shè)上述為第一方面的第一種可能的實施方式,則在第一種可能的實施方式作為基礎(chǔ)而提供的第二種可能的實施方式中,所述當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中,包括:
[0012]當(dāng)接收到調(diào)用函數(shù)指令,所述第一函數(shù)包含鎖定標(biāo)識時,將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中;
[0013]或,
[0014]當(dāng)接收到調(diào)用函數(shù)指令,所述第一函數(shù)包含鎖定指令時,將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中。
[0015]在第一種可能的實施方式作為基礎(chǔ)而提供的第三種可能的實施方式中,所述當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中之前,所述方法還包括:
[0016]當(dāng)所述第一函數(shù)的調(diào)用次數(shù)超過預(yù)設(shè)閾值時,確定所述第一函數(shù)為頻繁調(diào)用函數(shù);
[0017]在所述第一函數(shù)中設(shè)置鎖定標(biāo)識,所述鎖定標(biāo)識用于指示編譯器在接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中;
[0018]或,
[0019]在所述第一函數(shù)的指令中嵌入鎖定指令,所述鎖定指令用于將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中。
[0020]結(jié)合上述任一可能的實現(xiàn)方式,本發(fā)明實施例的第四種可能實現(xiàn)方式中,所述當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中包括:
[0021]當(dāng)接收到調(diào)用函數(shù)指令時,將所述第一函數(shù)在所述緩存中的前棧幀指針和堆棧指針之間緩存的數(shù)據(jù)鎖定在所述緩存中,并將輔助PC指針和當(dāng)前PC指針對應(yīng)的地址之間緩存的指令鎖定在所述緩存中,所述輔助PC指針用于記錄所述第一函數(shù)的入口地址。
[0022]在第一種、第二種和第三種任一項可能的實施方式作為基礎(chǔ)而提供的第五種可能的實施方式中,所述當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中包括:
[0023]當(dāng)接收到調(diào)用函數(shù)指令時,將所述第一函數(shù)在所述緩存中的前棧幀指針和堆棧指針之間緩存的數(shù)據(jù)鎖定在所述緩存中,并將輔助PC指針和第一 PC指針對應(yīng)的地址之間緩存的指令鎖定在所述緩存中,所述輔助PC指針用于記錄所述第一函數(shù)的入口地址,所述第一 PC指針為當(dāng)前PC指針與預(yù)設(shè)間隔之和。
[0024]第二方面,提供了一種函數(shù)調(diào)用裝置,所述裝置包括:
[0025]鎖定模塊,用于當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中;
[0026]調(diào)用函數(shù)模塊,用于根據(jù)所述調(diào)用函數(shù)指令調(diào)用第二函數(shù);
[0027]解鎖模塊,用于當(dāng)所述第二函數(shù)運行結(jié)束時,將所述第一函數(shù)的數(shù)據(jù)和指令解鎖。
[0028]假設(shè)上述為第二方面的第一種可能的實施方式,則在第一種可能的實施方式作為基礎(chǔ)而提供的第二種可能的實施方式中,所述鎖定模塊包括:
[0029]第一鎖定單元,用于當(dāng)接收到調(diào)用函數(shù)指令,所述第一函數(shù)包含鎖定標(biāo)識時,將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中;
[0030]第二鎖定單元,用于當(dāng)接收到調(diào)用函數(shù)指令,所述第一函數(shù)包含鎖定指令時,將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中。
[0031]在第一種可能的實施方式作為基礎(chǔ)而提供的第三種可能的實施方式中,所述裝置還包括:
[0032]頻繁函數(shù)確定模塊,用于當(dāng)所述第一函數(shù)的調(diào)用次數(shù)超過預(yù)設(shè)閾值時,確定所述第一函數(shù)為頻繁調(diào)用函數(shù);
[0033]標(biāo)識設(shè)置模塊,用于在所述第一函數(shù)中設(shè)置鎖定標(biāo)識,所述鎖定標(biāo)識用于指示編譯器在接收到調(diào)用函數(shù)指令時,將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中;
[0034]指令嵌入模塊,用于在所述第一函數(shù)的指令中嵌入鎖定指令,所述鎖定指令用于將所述第一函數(shù)的數(shù)據(jù)和指令鎖定在所述緩存中。
[0035]結(jié)合上述任一可能的實現(xiàn)方式,本發(fā)明實施例的第四種可能實現(xiàn)方式中,所述鎖定豐吳塊包括:
[0036]第三鎖定單元,用于當(dāng)接收到調(diào)用函數(shù)指令時,將所述第一函數(shù)在所述緩存中的前棧幀指針和堆棧指針之間緩存的數(shù)據(jù)鎖定在所述緩存中,并將輔助PC指針和當(dāng)前PC指針對應(yīng)的地址之間緩存的指令鎖定在所述緩存中,所述輔助PC指針用于記錄所述第一函數(shù)的入口地址。
[0037]在第一種、第二種和第三種任一項可能的實施方式作為基礎(chǔ)而提供的第五種可能的實施方式中,所述鎖定模塊包括:
[0038]第四鎖定單元,用于當(dāng)接收到調(diào)用函數(shù)指令時,將所述第一函數(shù)在所述緩存中的前棧幀指針和堆棧指針之間緩存的數(shù)據(jù)鎖定在所述緩存中,并將輔助PC指針和第一 PC指針對應(yīng)的地址之間緩存的指令鎖定在所述緩存中,所述輔助PC指針用于記錄所述第一函數(shù)的入口地址,所述第一 PC指針為當(dāng)前PC指針與預(yù)設(shè)間隔之和。
[0039]第三方面,提供了一種終端設(shè)備,包括:處理器和存儲器,所述處理器和所述存儲器親合,
[0040]處理器,用于當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在所述存儲器中;
[0041]所述處理器,還用于根據(jù)所述調(diào)用函數(shù)指令調(diào)用第二函數(shù);
[0042]所述處理器,還用于當(dāng)所述第二函數(shù)運行結(jié)束時,將所述存儲器中鎖定的所述第一函數(shù)的數(shù)據(jù)和指令解鎖。
[0043]本發(fā)明實施例提供的技術(shù)方案的有益效果是:
[0044]本發(fā)明實施例提供的方法、裝置和終端設(shè)備,通過當(dāng)接收到調(diào)用函數(shù)指令時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中;根據(jù)該調(diào)用函數(shù)指令調(diào)用第二函數(shù);當(dāng)該第二函數(shù)運行結(jié)束時,將該第一函數(shù)的數(shù)據(jù)和指令解鎖。采用本發(fā)明的技術(shù)方案,通過在發(fā)生函數(shù)調(diào)用時,將第一函數(shù)的數(shù)據(jù)和指令鎖定在緩存中,當(dāng)?shù)诙瘮?shù)運行結(jié)束時,再將該第一函數(shù)的數(shù)據(jù)和指令解鎖,避免了在發(fā)生函數(shù)調(diào)用時該第一函數(shù)的數(shù)據(jù)和指令在該緩存中被替換的問題,減小了后續(xù)返回第一函數(shù)時的高速緩存缺失率,提高了程序運行速度和系統(tǒng)性能。
【附圖說明】
[0045]為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0046]圖1是本發(fā)明實施例提供的一種函數(shù)調(diào)用方法的流程圖;
[0047]圖2是本發(fā)明實施例提供的一種函數(shù)調(diào)用方法的流程圖;
[0048]圖3是本發(fā)明實施例提供的一種函數(shù)鎖定示意圖;
[0049]圖4是本發(fā)明實施例提供的一種函數(shù)調(diào)用裝置的結(jié)構(gòu)示意圖;
[0050]圖5是本發(fā)明實施例提供的一種終端設(shè)備的結(jié)構(gòu)方框圖。
【具體實施方式】
[0051]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,