Bob Blog

If you want knowledge,you must toil for it.

LuaJit解析

Jit为什么快?

luac只有 interpreter模式. luajit分 interpreter 模式和 jit 模式, AOT(ahead-of-time compilation),只线下(offline)就将源代码编译成目标机器码,这是普遍用在系统程序语言中。也叫静态编译(static compilation)。 动态编译(dynamic compilation)指的是“在运行时进行编译...

Lua虚拟栈交互流程

分析Lua、C、C#如何交互的

当C和Lua互相调用的时候,Lua虚拟栈严格的按照LIFO规则操作,只会改变虚拟栈顶部分。但通过Lua的API,可以查询虚拟栈上的任何元素,甚至是在任何一个位置插入和删除元素。 虚拟栈中数据定义TValue,参见上篇文章。 虚拟栈基本操作 int lua_gettop (lua_State *L); //返回栈顶索引(即栈长度 ) void lua_...

Lua虚拟栈的实现-数据定义

分析Lua和C如何交互的

Lua 5.0 开始,Lua 就从基于栈的虚拟机( stack-based VM )改为了基于寄存器的虚拟机( register-based VM )。基于栈的虚拟机有JVM,.Net CLR,javascript V8。基于寄存器的虚拟机有Android Dalvik VM. 语言的虚拟机是借助于操作系统对物理机器的一种模拟。 虚拟CPU指令流水线一般有5个过程段: 1.取指(...

lua_State和global_state

分析Lua5.3.4源码,创建一个 Lua 状态机

分析Lua5.3.4源码,创建一个 Lua 状态机 luaL_newstate对用户的包装 /*lauxlib.c*/ LUALIB_API lua_State *luaL_newstate (void) { lua_State *L = lua_newstate(l_alloc, NULL); if (L) lua_atpanic(L, &panic); re...