本公開涉及信息,尤其涉及一種數(shù)據(jù)處理方法及裝置、電子設備及存儲介質(zhì)。
背景技術(shù):
1、wasm(webassembly)是一種新的字節(jié)碼格式,其編譯的代碼指令體積小、可移植、加載快并且可以兼容網(wǎng)頁(web)。隨著計算機技術(shù)的不斷發(fā)展,wasm的應用領(lǐng)域從web應用發(fā)展到在wasm對應的虛擬機(vm?virtual?machine)中加載運行。虛擬機用于指示軟件模擬的、具備完整硬件系統(tǒng)功能并運行在隔離環(huán)境下的完整計算機系統(tǒng);虛擬機包括系統(tǒng)虛擬機(vmwave)和程序虛擬機(jvm虛擬機)。
2、通過wasm虛擬機中的wasm程序?qū)ative函數(shù)進行調(diào)用時,需要對native函數(shù)進行編譯并注冊至wasm虛擬機。通常,不同native函數(shù)依賴的wasm程序不同,需要對每個native函數(shù)單獨編譯并注冊,存在函數(shù)調(diào)用步驟繁瑣、程序的運行性能相對較差的問題。并且,對每個被調(diào)用的native函數(shù)單獨注冊,注冊信息較多,需要占用較多的內(nèi)存資源。
技術(shù)實現(xiàn)思路
1、本公開實施例公開了一種數(shù)據(jù)處理方法及裝置、電子設備及存儲介質(zhì)。
2、根據(jù)本公開實施例的第一方面,提供一種數(shù)據(jù)處理方法,應用于wasm虛擬機中,所述方法包括:
3、在wasm程序的運行過程中,獲取對native函數(shù)的函數(shù)調(diào)用信息;其中,所述函數(shù)調(diào)用信息中包括函數(shù)索引信息和函數(shù)參數(shù)信息;
4、響應于在所述wasm程序的運行過程中檢測到對通用函數(shù)的調(diào)用指令,利用所述通用函數(shù)確定所述函數(shù)索引信息對應的目標函數(shù)簽名;其中,所述目標函數(shù)簽名中包括待調(diào)用的目標naitve函數(shù)的函數(shù)指針;
5、利用所述通用函數(shù)根據(jù)所述目標函數(shù)簽名以及所述第一函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標naitve函數(shù)。
6、在一些實施例中,所述方法還包括:
7、在所述wasm程序的編譯過程中,根據(jù)所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息生成函數(shù)對應的函數(shù)簽名,并為所述函數(shù)簽名分配函數(shù)索引信息;
8、在所述wasm程序的注冊過程中,將所述通用函數(shù)、各函數(shù)簽名以及函數(shù)簽名對應的函數(shù)索引信息進行關(guān)聯(lián)注冊;
9、所述響應于在所述wasm程序的運行過程中檢測到對通用函數(shù)的調(diào)用指令,利用所述通用函數(shù)確定所述函數(shù)索引信息對應的目標函數(shù)簽名,包括:
10、響應于在所述wasm程序的運行過程中檢測到對所述通用函數(shù)的所述調(diào)用指令,利用所述通用函數(shù)根據(jù)關(guān)聯(lián)注冊的信息確定所述函數(shù)調(diào)用信息中的函數(shù)索引信息對應的所述目標函數(shù)簽名。
11、在一些實施例中,所述根據(jù)所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息生成函數(shù)對應的函數(shù)簽名,包括:
12、將所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息存儲于預設數(shù)據(jù)結(jié)構(gòu)中;
13、基于所述預設數(shù)據(jù)結(jié)構(gòu)中native函數(shù)對應的函數(shù)信息,生成native函數(shù)對應的函數(shù)簽名。
14、在一些實施例中,所述函數(shù)參數(shù)信息包括關(guān)聯(lián)參數(shù)類型的參數(shù)值,所述目標函數(shù)簽名中還包括待調(diào)用的所述目標native函數(shù)的入?yún)㈩愋鸵约叭雲(yún)㈨樞颍?/p>
15、所述利用所述通用函數(shù)根據(jù)所述目標函數(shù)簽名以及所述函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標native函數(shù),包括:
16、利用所述通用函數(shù)根據(jù)所述入?yún)㈩愋秃退鋈雲(yún)㈨樞?,將所述參?shù)值賦給所述函數(shù)指針所指向的所述目標native函數(shù)。
17、在一些實施例中,所述利用所述通用函數(shù)根據(jù)所述目標函數(shù)簽名以及所述函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標native函數(shù),包括:
18、利用所述通用函數(shù)分別對所述目標函數(shù)簽名以及所述函數(shù)參數(shù)信息進行格式轉(zhuǎn)換,得到適用于所述native函數(shù)運行的編碼格式的函數(shù)簽名,以及適用于所述native函數(shù)運行的編碼格式的函數(shù)參數(shù)信息;
19、利用所述通用函數(shù)根據(jù)格式轉(zhuǎn)換后的函數(shù)簽名以及函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標native函數(shù)。
20、在一些實施例中,所述方法還包括:
21、利用所述通用函數(shù)對基于調(diào)用所述目標naitve函數(shù)得到的運行結(jié)果進行格式轉(zhuǎn)換,得到適用于所述wasm程序的運行結(jié)果。
22、在一些實施例中,所述將所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息存儲于預設數(shù)據(jù)結(jié)構(gòu)中,包括:
23、將各native函數(shù)的函數(shù)信息分別存儲于所述預設數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)子結(jié)構(gòu)中;其中,一個所述native函數(shù)的函數(shù)信息對應一個所述數(shù)據(jù)子結(jié)構(gòu);
24、所述基于所述預設數(shù)據(jù)結(jié)構(gòu)中native函數(shù)對應的函數(shù)信息,生成native函數(shù)對應的函數(shù)簽名,包括:
25、分別對各數(shù)據(jù)子結(jié)構(gòu)中的函數(shù)信息進行編碼,生成native函數(shù)對應的函數(shù)簽名。
26、根據(jù)本公開實施例的第二方面,提供一種數(shù)據(jù)處理裝置,所述裝置包括:
27、獲取模塊,用于在wasm程序的運行過程中,獲取對native函數(shù)的函數(shù)調(diào)用信息;其中,所述函數(shù)調(diào)用信息中包括函數(shù)索引信息和函數(shù)參數(shù)信息;
28、確定模塊,用于響應于在所述wasm程序的運行過程中檢測到對通用函數(shù)的調(diào)用指令,利用所述通用函數(shù)確定所述函數(shù)索引信息對應的目標函數(shù)簽名;其中,所述目標函數(shù)簽名中包括待調(diào)用的目標naitve函數(shù)的函數(shù)指針;
29、調(diào)用模塊,用于利用所述通用函數(shù)根據(jù)所述目標函數(shù)簽名以及所述函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標naitve函數(shù)。
30、在一些實施例中,所述裝置還包括:
31、生成模塊,用于在所述wasm程序的編譯過程中,根據(jù)所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息生成函數(shù)對應的函數(shù)簽名,并為所述函數(shù)簽名分配函數(shù)索引信息;
32、注冊模塊,用于在所述wasm程序的注冊過程中,將所述通用函數(shù)、各函數(shù)簽名以及函數(shù)簽名對應的函數(shù)索引信息進行關(guān)聯(lián)注冊;
33、所述確定模塊,用于響應于在所述wasm程序的運行過程中檢測到對所述通用函數(shù)的所述調(diào)用指令,利用所述通用函數(shù)根據(jù)關(guān)聯(lián)注冊的信息確定所述函數(shù)調(diào)用信息中的函數(shù)索引信息對應的所述目標函數(shù)簽名。
34、在一些實施例中,所述生成模塊,用于將所述wasm程序待調(diào)用的各native函數(shù)的函數(shù)信息存儲于預設數(shù)據(jù)結(jié)構(gòu)中;基于所述預設數(shù)據(jù)結(jié)構(gòu)中native函數(shù)對應的函數(shù)信息,生成native函數(shù)對應的函數(shù)簽名。
35、在一些實施例中,所述函數(shù)參數(shù)信息包括關(guān)聯(lián)參數(shù)類型的參數(shù)值,所述目標函數(shù)簽名中還包括待調(diào)用的所述目標native函數(shù)的入?yún)㈩愋鸵约叭雲(yún)㈨樞颍?/p>
36、所述調(diào)用模塊,用于利用所述通用函數(shù)根據(jù)所述入?yún)㈩愋秃退鋈雲(yún)㈨樞?,將所述參?shù)值賦給所述函數(shù)指針所指向的所述目標native函數(shù)。
37、在一些實施例中,所述調(diào)用模塊,用于利用所述通用函數(shù)分別對所述目標函數(shù)簽名以及所述函數(shù)參數(shù)信息進行格式轉(zhuǎn)換,得到適用于所述native函數(shù)運行的編碼格式的函數(shù)簽名,以及適用于所述native函數(shù)運行的編碼格式的函數(shù)參數(shù)信息;利用所述通用函數(shù)根據(jù)格式轉(zhuǎn)換后的函數(shù)簽名以及函數(shù)參數(shù)信息,調(diào)用所述函數(shù)指針所指向的所述目標naitve函數(shù)。
38、在一些實施例中,所述裝置還包括:
39、所述調(diào)用模塊,還用于利用所述通用函數(shù)對基于調(diào)用所述目標naitve函數(shù)得到的運行結(jié)果進行格式轉(zhuǎn)換,得到適用于所述wasm程序的運行結(jié)果。
40、在一些實施例中,所述生成模塊,用于將各native函數(shù)的函數(shù)信息分別存儲于所述預設數(shù)據(jù)結(jié)構(gòu)中的數(shù)據(jù)子結(jié)構(gòu)中;其中,一個所述native函數(shù)的函數(shù)信息對應一個所述數(shù)據(jù)子結(jié)構(gòu);
41、所述生成模塊,用于分別對各數(shù)據(jù)子結(jié)構(gòu)中的函數(shù)信息進行編碼,生成native函數(shù)對應的函數(shù)簽名。
42、根據(jù)本公開實施例的第三方面,提供一種電子設備,包括:
43、處理器;
44、用于存儲處理器可執(zhí)行指令的存儲器;
45、其中,所述處理器被配置為:用于運行所述可執(zhí)行指令時,實現(xiàn)本公開任意實施例所述的數(shù)據(jù)處理方法。
46、根據(jù)本公開實施例的第四方面,提供一種計算機可讀存儲介質(zhì),所述可讀存儲介質(zhì)存儲有可執(zhí)行程序,其中,所述可執(zhí)行程序被處理器執(zhí)行時實現(xiàn)本公開任意實施例所述的數(shù)據(jù)處理方法。
47、本公開的實施例提供的技術(shù)方案可以包括以下有益效果:
48、在本公開實施例中,wasm虛擬機利用通用函數(shù)基于被調(diào)用的目標native函數(shù)的函數(shù)索引信息,即可確定目標函數(shù)簽名,從而利用通用函數(shù)根據(jù)目標函數(shù)簽名以及函數(shù)參數(shù)信息,調(diào)用目標函數(shù)簽名中包括的函數(shù)指針所指向的目標native函數(shù)。可以理解的是,一方面,wasm虛擬機中通用函數(shù)根據(jù)函數(shù)索引信息即可進行調(diào)用,當存在多個待調(diào)用的目標native函數(shù)時,wasm虛擬機可獲取到多個目標native函數(shù)對應的函數(shù)索引信息,無需對每個目標native函數(shù)單獨編譯并注冊,因而對每個待調(diào)用的目標native函數(shù)的調(diào)用簡單、便捷、快速,程序運行的性能較好。另一方面,通過設置通用函數(shù)根據(jù)函數(shù)索引信息關(guān)聯(lián)被調(diào)用的目標native函數(shù),由于函數(shù)索引信息設置簡單方便,而無需wasm虛擬機基于各目標native函數(shù)的復雜的注冊信息實現(xiàn)調(diào)用,節(jié)省用于注冊目標native函數(shù)占用的內(nèi)存資源,也可以進一步降低對調(diào)用目標native函數(shù)的繁瑣程度;進而減少因內(nèi)存資源占用過多而導致的運行卡頓等情況,提高用戶的操作體驗。
49、應當理解的是,以上的一般描述和后文的細節(jié)描述僅是示例性和解釋性的,并不能限制本公開。