lua函数栈的base和top会冲突吗?
来源:互联网 发布:加内特数据统计 编辑:程序博客网 时间:2024/05/17 08:58
lua虚拟机在运行指令的使用会使用诸如RA, RB, RC等宏来找变量的位置, 这三个宏分别以base为底,加上指令中的A,B, C操作数。 而我们平时用到的
void (lua_pushnumber) (lua_State *L, lua_Number n); 这类函数是基于top的, 那么在push我们的数据时,会不会覆盖了一些正在使用的数据呢, base和top都指示栈上的位置,他们是如何避免冲突的呢?
在一个lua函数被调用时luaD_precall被调用到了, luaD_precall把函数的L->base指向了函数在栈上后一个的位置, 而L->top 赋值了ci->top, ci->top为L->base + p->maxstacksize; 可以看出只要p->maxstacksize足够大, 不小于变量的个数,就不会冲突了。 搜索lua的代码,改动maxstacksize的函数luaK_checkstack就在为变量预定位置的函数luaK_reserveregs中被调用,
void luaK_checkstack (FuncState *fs, int n) { int newstack = fs->freereg + n; if (newstack > fs->f->maxstacksize) { if (newstack >= MAXSTACK) luaX_syntaxerror(fs->ls, "function or expression too complex"); fs->f->maxstacksize = cast_byte(newstack); }}
在变量个数超过上次时,maxstacksize就更新。
- lua函数栈的base和top会冲突吗?
- Lua 语言的常见的相关base 变量和base函数
- 你真的会玩SQL吗?Top和Apply
- 网络销售真的会和地面渠道冲突吗?
- 宏定义和函数定义冲突会怎样?
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- Lua 标准库 - 基本函数(base function)
- 你真的会玩 SQL 吗?冷落的 Top 和 Apply
- lua函数.和:的使用
- linux解压缩
- 地址总线,字长,内存容量,寻址范围 之间的计算
- Linux进程状态解析之R、S、D、T、Z、X
- asp.net:找不到资料表0 7/14
- qq 在线状态
- lua函数栈的base和top会冲突吗?
- android 控件监听menu键
- 了解php
- HQL总结
- 小米校园招聘笔试题--括号智能纠错
- jsp中静态include和动态include的区别
- Dedicated stategies for GPCR MD simulation
- 读《代码整洁之道》有感——如何写出好代码
- 认识设计模式的概念原理(二)