共计 3 篇文章

LuaJIT虚拟机-函数与原型

Lua中的函数(或Function),其实应该是闭包(Closure),闭包可以认为是函数+外部变量,这里为了简单没有作区分,函数原型(或Proto)可以认为是函数的静态表示。 函数与函数原型的关系有点类似系统中进程与程序,一个程序被多次启动会创建多个进程。一个Proto可以被此加载创建多个函数。Proto是静态的,Function是动态的,在Lua中调用一个函数,总是先依照Proto创建一个函数对象,再执行这个函数对象。 函数原型 Proto ...

LuaJIT的变量实现-TValue

Lua是动态类型的编程语言,变量的值可以是数值、字符串、table等所有支持的数据类型。在Lua虚拟机中每个变量都是用一个TValue结构体表示。LuaJIT出于效率的考虑重新组织了TValue结构体。 lua-5.1中的TValue结构 lua-5.1中TValue的结构定义在lobject.h中,如下所示 /* ** Union of all Lua values */ typedef union { GCObject ...

欢迎来到JIT的世界: The Joy of Simple JITs

这个例子展示了简单的JIT(即时编译器)可以多么简单和有趣。JIT这个词让人联想到高深的魔法,只有顶尖的编译器团队才会想到使用。你可能会想到JVM或者.NET这样有数十万行代码的庞大的运行时库。你看不到像"Hello, World!"那样的JIT, 通过简短的代码做些有趣的事情。这篇文章尝试改变这个现状。 一个JIT和一个调用printf的程序没有本质的区别,只是JIT产生的是机器代码,而不是像"Hello, ...