详解C调用lua脚本效率测试
详解C调用lua脚本效率测试
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和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函数快一点点。
转载于:https://www.cnblogs.com/xiayong123/p/3716951.html
详解C调用lua脚本效率测试相关推荐
- Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本
Lua移植到arm上 并实现在arm上 可以让lua脚本调c语言,C语言调用lua脚本 首先参考http://wiki.chumby.com/index.php?title=Lua&print ...
- python调用cmd命令释放端口_详解python调用cmd命令三种方法
目前我使用到的python中执行cmd的方式有三种 使用os.system("cmd") 该方法在调用完shell脚本后,返回一个16位的二进制数,低位为杀死所调用脚本的信号号码, ...
- java 日志 异步_log4j 详解异步日志的配置和测试
log4j 详解异步日志的配置和测试 日志可以帮助我们分析故障原因,做些数据挖掘的工作.最简单的日志方法,就是自己写个写文件的方法,在需要打日志的时候调用下,但是这显然不可能在实际工程上用.还有个问题 ...
- python java混合编程_详解java调用python的几种用法(看这篇就够了)
java调用python的几种用法如下: 在java类中直接执行python语句 在java类中直接调用本地python脚本 使用Runtime.getRuntime()执行python脚本文件(推荐 ...
- python调用ping命令并输出ttl_详解Python调用系统命令的六种方法
作为胶水语言,Python可以很方便的执行系统命令,Python3中常用的执行操作系统命令有os.system().os.popen().subprocess.popen().subprocess.c ...
- 详解Linux交互式shell脚本中创建对话框实例教程
详解Linux交互式shell脚本中创建对话框实例教程 本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一 ...
- java使用集合存储过程_详解java调用存储过程并封装成map
详解java调用存储过程并封装成map 发布于 2020-5-1| 复制链接 摘记: 详解java调用存储过程并封装成map 本文代码中注释写的比较清楚不在单独说明,希望能帮助到大 ...
- vue调用手机相机相册_详解Vue调用手机相机和相册以及上传
组件 选中{{imgList.length}}张文件,共{{bytesToSize(this.size)}} javaScript代码 export default { name: "cam ...
- 详解Linux交互式shell脚本中创建对话框实例教程_linux服务器
本教程我们通过实现来讲讲Linux交互式shell脚本中创建各种各样对话框,对话框在Linux中可以友好的提示操作者,感兴趣的朋友可以参考学习一下. 当你在终端环境下安装新的软件时,你可以经常看到信息 ...
最新文章
- 解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80
- java calendar字符串显示_java关于字符串和日期的代码展示
- python之路2.0_Python之路【第二十一篇】:JS基础
- 面试官:为什么 Spring 中的 bean 默认为单例?
- 惠普与4PS联络中心国际标准组织达成战略合作
- 移动端web页面自适应和rem
- 代码上传到github上
- Web 端的测试 Selenium 用法必备
- python和unity3d_请教:28岁女自学转行unity3d或python,能否给些选择建议?
- Windows常用shell命令
- 使用指针实现strcpy函数的功能
- Cadence Virtuoso IC617从原理图建立器件和生成版图
- SWIFT,国际清算与数字人民币
- matlab简易二维绘图函数的命令为,MATLAB绘图函数
- python3+ffmpeg下载B站视频,附代码
- java洁能租车计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
- linux回环网卡,Linux回环网卡驱动设计
- 【上电即上华为云】华为云AIoT智联开发板_mcu_HK32F103Vx
- STM8L101时钟管理
- pixy php,Pixy快速入门指南.pdf
热门文章
- 数据库设计(三)概念数据模型
- server长时间运行query,Ajax刷新被block
- 【目录】 Git 教程
- window7不要光盘修复计算机,Win7若崩溃了就靠它——Win7系统修复光盘制作方法解析...
- python的字典与集合
- 如何高效学习 Kubernetes 知识图谱?
- 今日直播 | Apache Hudi x Apache Pulsar Meetup线上专场如期而至 大咖齐聚
- Spring Boot参数校验以及分组校验的使用
- Forrester 首席分析师对话阿里云容器服务负责人:容器的未来趋势是什么?
- 自定义 View 功能上线,你的小程序可以更多变