`
yesjavame
  • 浏览: 687696 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

C调用lua脚本的效率测试

阅读更多

C调用lua脚本的效率测试

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

代码整理自:http://blog.csdn.net/Tomorrow/archive/2008/06/11/2536884.aspx

#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 "
" sum = 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.

分享到:
评论

相关推荐

    Lua与C/C++交互——C/C++调用Lua脚本

    本文将深入探讨如何在C/C++程序中调用Lua脚本,以实现强大的功能扩展和灵活的逻辑处理。Lua是一种轻量级的脚本语言,因其简洁、高效的语法和易于嵌入其他系统而受到广泛欢迎。 1. **Lua简介** Lua是一种动态类型的...

    Java调用Lua脚本(LuaJava使用、安装及Linux安装编译)

    Java调用Lua脚本是一种常见的跨语言交互技术,特别是在游戏开发和自动化脚本编写中。本文将详细介绍如何在Java环境中使用LuaJava库进行交互,并在Linux系统上进行安装和编译。 首先,让我们理解LuaJava。LuaJava是...

    delphi调用lua脚本的一个例子

    在本文中,我们将深入探讨如何在Delphi编程环境中调用Lua脚本,以实现更灵活的逻辑处理和功能扩展。Delphi是一款强大的Object Pascal集成开发环境(IDE),而Lua则是一种轻量级、高效的脚本语言,常用于游戏开发和...

    vb调用lua脚本案例,带mdlLua.bas模块

    标题中的“vb调用lua脚本案例,带mdlLua.bas模块”表明这是一个关于使用Visual Basic(VB)编程语言调用Lua脚本的实际应用实例。在这个案例中,开发者提供了一个名为`mdlLua.bas`的模块,这个模块是将Lua的原始C语言...

    Windows下使用mingw编译实现c程序调用lua脚本测试代码源码

    在Windows操作系统中,开发C程序并调用Lua脚本是一个常见的需求,特别是在游戏开发、自动化脚本或者其他需要灵活脚本支持的场景。MinGW(Minimalist GNU for Windows)是一个为Windows提供GNU工具集的开源项目,它...

    Lua脚本语言在自动测试中的应用

    通过Lua的API,开发者可以在Lua脚本中调用C/C++编写的函数,实现对底层功能的访问和控制。这种特性使得Lua在测试系统中能够灵活地扩展功能,满足多样化的需求。 2. **整合性**:作为“glue language”,Lua可以将...

    Test_Lua.rar_VS2010_VS2010 Lua_VS2010调用LUA脚本基础_lua_lua脚本

    本文将详细介绍如何在VS2010环境下调用Lua脚本,构建一个基本的脚本调用框架模型。 首先,我们需要了解Lua的特性。Lua是一种轻量级的、解释型的、动态类型的脚本语言,它的设计目标是易于学习、使用和嵌入。Lua语法...

    lualib,c++调用lua脚本

    首先,`lualib`是一个为C++提供的库,它封装了Lua API,使得C++开发者能够更加方便地集成和调用Lua脚本。这个库通常包含了头文件和库文件,提供了一系列的接口供C++调用,如加载脚本、执行函数、传递参数等。 在C++...

    linux环境中c++调用lua动态链接库以及编译方法

    Lua是一个轻量级的脚本语言,它的动态链接库允许C/C++程序直接嵌入和调用Lua函数。在Linux系统中,动态链接库通常以`.so`为后缀,代表"shared object"。`liblua.so`包含了Lua的运行时环境和核心API,供C++代码使用。...

    STM32F103 运行lua脚本例程.rar

    通过STM32F103运行lua脚本,开发者可以利用其强大的计算能力,同时避免了编写底层C/C++代码的复杂性,提高了开发效率。 在学习和交流这个项目时,重点应该放在以下几个方面: 1. STM32F103的硬件特性,如内存布局...

    Cocos2d-x 如何使用Lua脚本

    5. **调用Lua函数**:如果需要在Lua脚本中定义函数并从C++调用,可以使用`cocos2d::CCScriptEngineProtocol::callFunction("lua_function_name", args...)`,其中`lua_function_name`是Lua中的函数名,`args...`是...

    vc 程序调用lua脚本简单示例

    本示例“vc程序调用lua脚本简单示例”正好展示了如何在Visual C++ (vc++)环境中调用Lua脚本来实现这一目标。Lua是一种轻量级的、动态的、解释型的脚本语言,常用于游戏开发、配置文件解析和其他需要嵌入式脚本的语言...

    C++调用Lua配置.

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

    SpringBoot+Redis执行lua脚本的方法步骤

    SpringBoot+Redis 执行 Lua 脚本的方法步骤 以下是 SpringBoot+Redis 执行 Lua 脚本的方法步骤的知识点总结: 1. 背景:在开发中,我们需要一次性操作多个 Redis 命令,但是这些操作不具备原子性,而 Redis 的事务...

    C#调用lua脚本,适合初始了解的朋友

    C#调用lua脚本,适合初始了解的朋友 Lua [1] 是一个小巧的脚本语言。它是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个由Roberto Ierusalimschy、Waldemar Celes 和 Luiz ...

    c#调用脚本语言Lua——简单Demo

    c#调用脚本语言Lua——简单Demo 配置: 1. 下载c#下的Lua支持类库。下载地址:http://files.luaforge.net/releases/luainterface/luainterface/2.0.3 将(lua51.dll\LuaInterface.dll)引用自己的项目中。 2. 修改...

    LUA脚本|LUA脚本支持库

    如果LUA支持库与易语言结合,这意味着开发者可以在LUA脚本中调用易语言的函数,实现更复杂的逻辑或者利用易语言的特性。这样的结合可以提供更广泛的编程选项,特别是在处理与操作系统交互、资源管理等方面。 LUA_...

    易语言lua的例子

    7. **测试.lua**:这是一个Lua脚本文件,通常用于测试易语言调用Lua的功能。你可以通过易语言的接口执行这个脚本,了解如何在易语言中运行和管理Lua代码。 通过这些文件,你可以学习到如何在易语言环境中使用Lua,...

Global site tag (gtag.js) - Google Analytics