詳解C調用lua腳本效率測試
作者:佚名
C調用lua腳本效率測試是本文要介紹的內容,以下代碼以C語言為基準,測試了C調用Lua循環和循環調用Lua的效率,來看詳細內容。
C調用lua腳本效率測試是本文要介紹的內容,以下代碼以C語言為基準,測試了C調用Lua循環和循環調用Lua的效率。結論是不要頻繁地穿越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 "
- " sumsum = sum + a + b "
- " end "
- " return sum "
- "end "
- " "
- "function add(a, b) "
- " return a + b "
- "end "
- ;
- // lua 腳本里面的函數由C調用
- int use_lua_add(lua_State *L, const char *func_name, int x, int y)
- {
- int sum; /* 通過名字得到Lua函數 */
- lua_getglobal(L, func_name); /* ***個參數 */
- lua_pushnumber(L, x); /* 第二個參數 */
- lua_pushnumber(L, y); /* 調用函數,告知有兩個參數,一個返回值 */
- lua_call(L, 2, 1); /* 得到結果 */
- 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;
- }
運行結果:
- C++: 31ms.
- The sum is 20000000.
- Lua loop_add: 437ms.
- The sum is 20000000.
- Loop lua add: 2360ms.
- The sum is 20000000.
小結:詳解C調用lua腳本效率測試的內容介紹完了,希望通過本文的學習能對你有所幫助!
責任編輯:zhaolei
來源:
網絡轉載