前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >详解C调用lua脚本效率测试

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

作者头像
用户4766018
发布2022-08-19 09:48:16
7440
发布2022-08-19 09:48:16
举报
文章被收录于专栏:格物致知格物致知

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

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

代码语言:javascript
复制
#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;  
} 

运行结果:

代码语言:javascript
复制
C++: 31ms.  
The sum is 20000000.  
Lua loop_add: 437ms.  
The sum is 20000000.  
Loop lua add: 2360ms.  
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函数快一点点。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2014-04-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 详解C调用lua脚本效率测试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档