`
aigo
  • 浏览: 2675206 次
  • 性别: Icon_minigender_1
  • 来自: 宜昌
社区版块
存档分类
最新评论

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

阅读更多

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

 

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配置.

    本文将详细介绍如何在C++环境中调用Lua脚本,并通过一个具体的示例来演示这一过程。 #### 二、测试环境搭建 1. **环境准备**: - 操作系统:Windows 7 - IDE:Visual Studio 2005 - Lua版本:LuaForWindows_v...

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log(方法步骤详解)

    SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log SpringBoot通过redisTemplate调用lua脚本并打印调试信息到redis log是指在SpringBoot应用程序中,通过redisTemplate调用lua脚本,并将调试信息...

    OpenWrt UCI详解(C和Lua语言使用uci接口实例).docx

    OpenWrt UCI详解 1. uci 简介 UCI(Unified Configuration Interface)是OpenWrt操作系统中的一个核心组件,它提供了一种标准化的方式来管理和配置系统中的各种服务和应用程序。通过UCI,开发者可以创建统一格式的...

    Lua编程示例(六): C语言调用Lua函数

    在《Lua编程示例(六):C语言调用Lua函数》这篇文章中,作者通过一个具体的代码示例,展示了如何从C/C++环境中调用Lua脚本,并与Lua脚本进行交互。这种交互主要包括加载Lua脚本、执行Lua函数以及处理Lua数据。 ###...

    LUA脚本支持库1.0版(LUA_FNE.fne)-易语言

    《LUA脚本支持库1.0版在易语言中的应用与详解》 LUA_FNE.fne,作为易语言的第三方支持库,是专为LUA脚本提供调用扩展功能的重要工具。该库基于LUA 5.1.4版本进行封装,确保了在易语言环境下对LUA脚本的兼容性和稳定...

    nodemcu lua脚本语言开发工具

    《nodemcu Lua脚本语言开发工具详解》 在物联网(IoT)领域,nodemcu因其小巧的体积、丰富的功能以及易于编程的特性,成为众多开发者的选择。它基于ESP8266芯片,内嵌Lua解释器,使得开发者可以使用Lua这种轻量级的...

    LUA 5.1.3 sample

    - **Sample** 文件夹中的示例代码展示了如何在 C/C++ 项目中嵌入 Lua,如调用 Lua 函数、注册 C 函数到 Lua 环境、执行 Lua 脚本等。 - **加载与运行脚本**:通过 `luaL_loadbuffer` 或 `luaL_dofile` 加载并运行 ...

    Luanet(0.01) Lua与.net接口函数库

    Luanet作为Lua与.NET之间的桥梁,允许Lua代码调用.NET框架中的类库和方法,同时也支持.NET代码调用Lua脚本。这极大地拓展了Lua的应用场景,使其能在游戏开发、自动化脚本、配置管理等场景下与强大的.NET生态系统无缝...

    programming language lua

    Lua API提供了一种C语言接口,使得C程序可以直接调用Lua代码或者Lua脚本可以调用C函数。这种交互方式极大地增强了Lua的应用范围,尤其是在需要高性能计算或访问底层系统资源的情况下。 **1. C语言中的Lua操作:** ...

    luajava.zip

    《LuaJava:在Java平台上的Lua脚本引擎详解》 LuaJava是一个强大的工具,它将Lua脚本语言与Java环境紧密地结合起来,使得开发者可以在Java应用程序中无缝地使用Lua脚本进行逻辑处理和扩展功能。在本文中,我们将...

    windows下使用的luac 基于5.1版本

    LuaC是一款用于编译Lua脚本的工具,它将源代码转换成预编译的字节码,以便于提高程序的加载速度和安全性。在Windows操作系统中,Luac 5.1版本是广泛使用的版本,与lua51.dll和tolua++.exe等组件一起构成了Lua开发...

    lua-devel-5.3.4-12.el8.aarch64

    1. **头文件**:例如 `lua.h`、`luac.h` 等,这些头文件定义了 Lua API,供 C/C++ 程序调用 Lua 的函数和结构体,以便在 C 代码中与 Lua 脚本进行交互。 2. **库文件**:`liblua.a` 或 `liblua.so` 是静态和动态...

    罗技脚本编程G-series Lua API 参考文档(中文版)

    - **描述**:该文档主要介绍了如何使用Lua脚本来为罗技G系列的鼠标和键盘编写宏,适用于初学者和进阶用户。 #### 知识点详解 ##### 1. G-series Lua API 参考文档介绍 - **版本**: V8.50 - **目标读者**: 假设读者...

    srlua打包(Lua 5.4.6)

    4. **C/C++ 集成**:将 `lua54.lib` 链接到你的 C/C++ 工程,然后通过 `lua54.dll` 运行时库来调用 Lua API。 5. **编译字节码**:使用 `luac.exe` 将 Lua 源代码编译为 `.lua` 文件,以便在没有源代码的情况下执行...

    LuaIDE远程调试器

    `1.lua`和`2.lua`则是示例或测试用的Lua脚本,供用户学习和调试使用。 使用LuaIDE远程调试器,开发者需要配置好远程设备上的Lua环境,并确保LuaDB已正确安装并运行。然后在LuaIDE中连接到远程设备,加载待调试的Lua...

    lua-examples:NodeMCU的Lua脚本示例

    “lua-examples:NodeMCU的Lua脚本示例”这个标题表明这是一个关于使用Lua编程语言在NodeMCU平台上编写脚本的实际示例集合。NodeMCU是一种基于ESP8266 Wi-Fi芯片的开源硬件平台,它支持Lua编程,常用于物联网(IoT)...

Global site tag (gtag.js) - Google Analytics