生活随笔
收集整理的這篇文章主要介紹了
详解C调用lua脚本效率测试
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
詳解C調(diào)用lua腳本效率測(cè)試
C 調(diào)用lua腳本 效率測(cè)試 是本文要介紹的內(nèi)容,以下代碼以C 語言為基準(zhǔn),測(cè)試 了C 調(diào)用Lua 循環(huán)和循環(huán)調(diào)用Lua 的效率。結(jié)論是不要頻繁地穿越C/Lua 邊界.
#include?< time.h > ? ? extern?"C" ? { ? #include?"lua.h" ? #include?"lualib.h" ? #include?"lauxlib.h" ? }/*?Lua解釋器指針?*/ ? ? const?char?LUA_SCRIPT[]?= ? ????"function?loop_add(a,?b)????????????" ? ????"???local?sum ?=?0 ???????????????????" ? ????"???for?i ?=?1 ,?10000000?do??????????" ? ????"???????sum sum ?=?sum?+?a?+?b???????????" ? ????"???end?????????????????????????????" ? ????"???return?sum??????????????????????" ? ????"end????????????????????????????????" ? ????"???????????????????????????????????" ? ????"function?add(a,?b)?????????????????" ? ????"???return?a?+?b????????????????????" ? ????"end????????????????????????????????" ? ????; ? ? //?lua?腳本里面的函數(shù)由C調(diào)用 ? int?use_lua_add(lua_State?*L,?const?char?*func_name,?int?x,?int?y) ? { ? ????int?sum;????????????????????????/*?通過名字得到Lua函數(shù)?*/ ? ????lua_getglobal(L,?func_name);????/*?第一個(gè)參數(shù)?*/ ? ????lua_pushnumber(L,?x);???????????/*?第二個(gè)參數(shù)?*/ ? ????lua_pushnumber(L,?y);???????????/*?調(diào)用函數(shù),告知有兩個(gè)參數(shù),一個(gè)返回值?*/ ? ????lua_call(L,?2,?1);??????????????/*?得到結(jié)果?*/ ? ????sum ?=?(int)lua_tointeger(L,?-1); ? ????lua_pop(L,?1); ? ????return?sum; ? } ? ? int?main() ? { ? ????int?i,?sum ?=?0 ; ? ????clock_t?tStart,?tStop; ? ? ????lua_State?*L ?=?lua_open ();??/*?opens?Lua?*/ ? ????luaL_openlibs(L); ? ????if?(luaL_dostring(L,?LUA_SCRIPT))??//?Run?lua?script ? ????{ ? ????????printf("run?script?failed/n"); ? ????????lua_close(L); ? ????????return?-1; ? ????} ? ? ????sum ?=?0 ; ? ????tStart ?=?clock (); ? ????for?(i ?=?0 ;?i?< ?10000000 ;?i++) ? ????{ ? ????????sum?+=?1?+?1; ? ????} ? ????tStop ?=?clock (); ? ????printf("C++:?%dms./nThe?sum?is?%u./n", ? ???????????(tStop?-?tStart)?*?1000?/?CLOCKS_PER_SEC,?sum); ? ? ????sum ?=?0 ; ? ????tStart ?=?clock (); ? ????sum ?=?use_lua_add (L,?"loop_add",?1,?1); ? ????tStop ?=?clock (); ? ????printf("Lua?loop_add:?%dms./nThe?sum?is?%u./n", ? ???????????(tStop?-?tStart)?*?1000?/?CLOCKS_PER_SEC,?sum); ? ??????????? ? ????sum ?=?0 ; ? ????tStart ?=?clock (); ? ????for?(i ?=?0 ;?i?< ?10000000 ;?i++) ? ????{ ? ????????sum?+=?use_lua_add(L,?"add",?1,?1); ? ????} ? ????tStop ?=?clock (); ? ????printf("Loop?lua?add:?%dms./nThe?sum?is?%u./n", ? ???????????(tStop?-?tStart)?*?1000?/?CLOCKS_PER_SEC,?sum); ? ????lua_close(L); ? ????return?0; ? }? 運(yùn)行結(jié)果:
C++:?31ms. ? The?sum?is?20000000. ? Lua?loop_add:?437ms. ? The?sum?is?20000000. ? Loop?lua?add:?2360ms. ? The?sum?is?20000000.? 小結(jié):詳解C 調(diào)用lua腳本 效率測(cè)試 的內(nèi)容介紹完了,希望通過本文的學(xué)習(xí)能對(duì)你有所幫助!
想看看c調(diào)用lua和lua調(diào)用c效率有多大差別嗎?
加一種測(cè)試:
?"function loop_cadd(a, b)??????????? "???? ??? "?? local sum = 0?????????????????? "??? ??? "?? for i = 1, 10000000 do????????? "??? ??? "?????? sum = sum + csum(a,b)?????????? "??? ??? "?? end???????????????????????????? "??? ??? "?? return sum????????????????????? "????? ??? "end??????????????????????????????? "??
其中csum是一個(gè)c函數(shù) int csum(lua_State* l) { ??? int a = lua_tointeger(l,1) ; ??? int b = lua_tointeger(l,2) ; ??? lua_pushinteger(l,a+b) ; ??? return 1 ; }
測(cè)試結(jié)果如下:
C++: 21ms. The sum is 20000000. Lua loop_add: 640ms. The sum is 20000000. Lua loop_cadd: 3027ms. The sum is 20000000. Loop lua add: 3927ms. The sum is 20000000.
結(jié)論是從lua調(diào)用c函數(shù)要比c調(diào)用lua函數(shù)快一點(diǎn)點(diǎn)。
轉(zhuǎn)載于:https://www.cnblogs.com/xiayong123/p/3716951.html
總結(jié)
以上是生活随笔 為你收集整理的详解C调用lua脚本效率测试 的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔 推薦給好友。