详解C调用lua脚本效率测试_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > 详解C调用lua脚本效率测试

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

 2015/4/30 5:07:49  aigo  程序员俱乐部  我要评论(0)
  • 摘要:原文:http://mobile.51cto.com/iphone-285909.htmC调用lua脚本效率测试是本文要介绍的内容,以下代码以C语言为基准,测试了C调用Lua循环和循环调用Lua的效率。结论是不要频繁地穿越C/Lua边界.#include<time.h>extern"C"{#include"lua.h"#include"lualib.h"#include"lauxlib.h"
  • 标签:详解 测试 效率 脚本

原文:http://mobile.51cto.com/iphone-285909.htm

?

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

?

class="cpp">#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.?

上一篇: iOS中的生命周期 下一篇: 没有下一篇了!
发表评论
用户名: 匿名