0 预备知识:

至少对Lua手册C API有简单的了解。lua5.3手册中文

1  Lua虚拟机的栈,如图:

假设虚拟机的栈有n个数据:

解释:

两种解释方式:

A,栈顶开始, -1 ...-n

B,栈底开始,1 ...n

二、运行原理和调用栈机制实例

创建main.lua

 function LuaFunc(a)
return +a,,,;
end

C++

 //①新建虚拟机
lua_State* L = luaL_newstate();
//②载入库
luaL_openlibs(L); //③这里执行 test.lua Lua文件
luaL_dofile(L, "main.lua"); //④重新设置栈底
lua_settop(L, ); //⑤获取 返回结果
lua_getglobal(L, "LuaFunc");
// 打印结果:4
printf("栈顶的索引:%d\n", lua_gettop(L));
lua_pushinteger(L, ); //⑥操作栈调回结果
lua_pcall(L, , , ); //此时你会发现栈内有4个元素
printf("lua_gettop %d\n", lua_gettop(L)); printf("%s\n", lua_tostring(L, ));
printf("%s\n", lua_tostring(L, ));
printf("%s\n", lua_tostring(L, ));
printf("%s\n", lua_tostring(L, )); //⑦一定记得关闭虚拟机
lua_close(L); system("pause");
return ;

运行结果:

分析:

1-3,准备环境,执行Lua文件

4,重新设置栈底

5,获取函数LuaFunc,并且压如栈(栈内有1个元素了),lua_pushinteger将14压入栈(栈内有2个元素了)

6,pop出栈的函数,参数(栈内有0个元素了),计算得到的结果,15,2,3,4 分别压入栈(栈内有4个元素了)

C与lua交互--lua调用栈分析(2)的更多相关文章

  1. Android群英传笔记——第八章:Activity与Activity调用栈分析

    Android群英传笔记--第八章:Activity与Activity调用栈分析 开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命 ...

  2. Android群英传》读书笔记 (4) 第八章 Activity和Activity调用栈分析 + 第九章 系统信息与安全机制 + 第十章 性能优化

    第八章 Activity和Activity调用栈分析 1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重 ...

  3. PL/SQL精明的调用栈分析

    PL/SQL精明的调用栈分析 原文:http://www.oracle.com/technetwork/issue-archive/2014/14-jan/o14plsql-2045346.html ...

  4. python错误处理—try…catch…finally、调用栈分析

    高级语言包括python一般都内置了一套try…catch…finally的错误处理机制: >>> try: ... print('try...') ... r = 10 / 0 . ...

  5. 第四章 Activity和Activity调用栈分析 系统信息与安全机制 性能优化

    1.Activity生命周期理解生命周期就是两张图:第一张图是回字型的生命周期图第二张图是金字塔型的生命周期图 注意点(1)从stopped状态重新回到前台状态的时候会先调用onRestart方法,然 ...

  6. Android组件内核之Activity调用栈分析(一)

    阿里P7Android高级架构进阶视频免费学习请点击:https://space.bilibili.com/474380680 导语 我们陈述一下Activity,Activity是整个应用用户交互的 ...

  7. Lua 和 C 交互中虚拟栈的操作

    Lua 和 C 交互中虚拟栈的操作 /* int lua_pcall(lua_State *L, int nargs, int nresults, int msgh) * 以保护模式调用具有" ...

  8. Lua中如何实现类似gdb的断点调试--03通用变量修改及调用栈回溯

    在前面两篇01最小实现及02通用变量打印中,我们已经实现了设置断点.删除断点及通用变量打印接口. 本篇将继续新增两个辅助的调试接口:调用栈回溯打印接口.通用变量设置接口.前者打印调用栈的回溯信息,后者 ...

  9. C++与Lua交互(二)

    上一篇我们搭建好了整个的项目环境,现在,我们一起探索一下如何将lua寄宿到C++中. 宿主的实现 我们在LuaWithCPPTest项目下,查看Source.cpp代码如下: #include < ...

随机推荐

  1. Linux使用手册

    一.开关机 sync :把内存中的数据写到磁盘中(关机.重启前都需先执行sync) shutdown -rnow或reboot :立刻重启 shutdown -hnow :立刻关机 shutdown ...

  2. Java中的map集合顺序如何与添加顺序一样

    一般使用map用的最多的就是hashmap,但是hashmap里面的元素是不按添加顺序的,那么除了使用hashmap外,还有什么map接口的实现类可以用呢? 这里有2个,treeMap和linkedH ...

  3. MDK未添加相应芯片的安装包

    问题: No Algorithm found for: 00000000H - 00000567HErase skipped!Error: Flash Download failed - " ...

  4. cb25a_c++_函数对象简介

    cb25a_c++_函数对象简介预定义的函数对象https://blog.csdn.net/txwtech/article/details/104382505negate<type>()p ...

  5. Netty中的这些知识点,你需要知道!

    一.Channel Channel是一个接口,而且是一个很大的接口,我们称之为“大而全”,囊括了server端及client端接口所需要的接口. Channel是一个门面,封装了包括网络I/O及相关的 ...

  6. 01 . MongoDB简介及部署配置

    简介 什么是MongoDB? MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统. 在高负载的情况下,添加更多的节点,可以保证服务器性能. MongoDB 旨在为WEB应用 ...

  7. 定时任务Cron

    Linux系统中的定时任务cron,一个很实际很有效很简单的一个工作,在日常的生产环境中,会被广泛使用的一个组件.通过设置时间.执行的脚本等内容,能够让系统自动的执行相关任务,很是方便. cron定时 ...

  8. 虹软AI 人脸识别SDK接入 — 参数优化篇

    引言 使用了免费的人脸识别算法,感觉还是很不错的,但是初次接触的话会对一些接口的参数有些疑问的.这里分享一下我对一些参数的验证结果(这里以windows版本为例,linux.android基本一样), ...

  9. SpringMVC 学习笔记(四)

    41. 尚硅谷_佟刚_SpringMVC_返回JSON.avi SpringMVC中使用@ResponseBody注解标注业务方法,将业务方法的返回值做成json输出给页面 导包: 除了一些sprin ...

  10. 你的 IDEA 是如何配置的?卡不卡?试试这样配置

    本文作者在和同事的一次讨论中发现,对 IntelliJ IDEA 内存采用不同的设置方案,会对 IDE 的速度和响应能力产生不同的影响. Don't be a Scrooge and give you ...