• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

详解C调用lua脚本效率测试

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

    C调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试C调用Lua循环和循环调用Lua的效率。结论是不要频繁地穿越C/Lua边界.

    1. #include <time.h> 
    2.  
    3. extern "C"  
    4. {  
    5. #include "lua.h"  
    6. #include "lualib.h"  
    7. #include "lauxlib.h"  
    8. }/* Lua解释器指针 */  
    9.  
    10. const char LUA_SCRIPT[] =  
    11.     "function loop_add(a, b)            "  
    12.     "   local sum = 0                   "  
    13.     "   for i = 1, 10000000 do          "  
    14.     "       sumsum = sum + a + b           "  
    15.     "   end                             "  
    16.     "   return sum                      "  
    17.     "end                                "  
    18.     "                                   "  
    19.     "function add(a, b)                 "  
    20.     "   return a + b                    "  
    21.     "end                                "  
    22.     ;  
    23.  
    24. // lua 脚本里面的函数由C调用  
    25. int use_lua_add(lua_State *L, const char *func_name, int x, int y)  
    26. {  
    27.     int sum;                        /* 通过名字得到Lua函数 */  
    28.     lua_getglobal(L, func_name);    /* 第一个参数 */  
    29.     lua_pushnumber(L, x);           /* 第二个参数 */  
    30.     lua_pushnumber(L, y);           /* 调用函数,告知有两个参数,一个返回值 */  
    31.     lua_call(L, 2, 1);              /* 得到结果 */  
    32.     sum = (int)lua_tointeger(L, -1);  
    33.     lua_pop(L, 1);  
    34.     return sum;  
    35. }  
    36.  
    37. int main()  
    38. {  
    39.     int i, sum = 0;  
    40.     clock_t tStart, tStop;  
    41.  
    42.     lua_State *L = lua_open();  /* opens Lua */  
    43.     luaL_openlibs(L);  
    44.     if (luaL_dostring(L, LUA_SCRIPT))  // Run lua script  
    45.     {  
    46.         printf("run script failed/n");  
    47.         lua_close(L);  
    48.         return -1;  
    49.     }  
    50.  
    51.     sum = 0;  
    52.     tStart = clock();  
    53.     for (i = 0; i < 10000000; i++)  
    54.     {  
    55.         sum += 1 + 1;  
    56.     }  
    57.     tStop = clock();  
    58.     printf("C++: %dms./nThe sum is %u./n",  
    59.            (tStop - tStart) * 1000 / CLOCKS_PER_SEC, sum);  
    60.  
    61.     sum = 0;  
    62.     tStart = clock();  
    63.     sum = use_lua_add(L, "loop_add", 1, 1);  
    64.     tStop = clock();  
    65.     printf("Lua loop_add: %dms./nThe sum is %u./n",  
    66.            (tStop - tStart) * 1000 / CLOCKS_PER_SEC, sum);  
    67.              
    68.     sum = 0;  
    69.     tStart = clock();  
    70.     for (i = 0; i < 10000000; i++)  
    71.     {  
    72.         sum += use_lua_add(L, "add", 1, 1);  
    73.     }  
    74.     tStop = clock();  
    75.     printf("Loop lua add: %dms./nThe sum is %u./n",  
    76.            (tStop - tStart) * 1000 / CLOCKS_PER_SEC, sum);  
    77.     lua_close(L);  
    78.     return 0;  

    运行结果:

    1. C++: 31ms.  
    2. The sum is 20000000.  
    3. Lua loop_add: 437ms.  
    4. The sum is 20000000.  
    5. Loop lua add: 2360ms.  
    6. The sum is 20000000. 

    小结:详解C调用lua脚本效率测试的内容介绍完了,希望通过本文的学习能对你有所帮助!

    想看看c调用lua和lua调用c效率有多大差别吗?

    加一种测试:

     "function loop_cadd(a, b)            "    
        "   local sum = 0                   "   
        "   for i = 1, 10000000 do          "   
        "       sum = sum + csum(a,b)           "   
        "   end                             "   
        "   return sum                      "     
        "end                                "  

    其中csum是一个c函数
    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++: 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.

    结论是从lua调用c函数要比c调用lua函数快一点点。


    鲜花

    握手

    雷人

    路过

    鸡蛋
    该文章已有0人参与评论

    请发表评论

    全部评论

    专题导读
    上一篇:
    [lua]紫猫lua教程-命令宝典-L1-01-10. 自定义函数发布时间:2022-07-22
    下一篇:
    【Lua】环境安装与HelloWorld发布时间:2022-07-22
    热门推荐
    热门话题
    阅读排行榜

    扫描微信二维码

    查看手机版网站

    随时了解更新最新资讯

    139-2527-9053

    在线客服(服务时间 9:00~18:00)

    在线QQ客服
    地址:深圳市南山区西丽大学城创智工业园
    电邮:jeky_zhao#qq.com
    移动电话:139-2527-9053

    Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap