Lua可作为扩展性语言(Lua可以作为程序库用来扩展应用的功能),同时也是个可扩展的语言(Lua程序中可以注册由其他语言实现的函数)。 C和Lua交互的部分称为C API。C API是一个C代码与Lua进行交互的函数集。他由以下部分组成:读写Lua全局变量的函数、调用Lua函数的函数、运行Lu...
分类:
编程语言 时间:
2014-07-27 23:19:39
阅读次数:
297
话不多说,直接上代码--代码是lua的,c++也一样 local text = ccui.Text:create("text can line wrap text can line wrap text can line wrap text can line wrap text can line w....
分类:
其他好文 时间:
2014-07-27 22:42:09
阅读次数:
245
我们晓得,lua 对外的 API 中,统统个 gc 打交道的都经过lua_gc。C 说话构建体系时,普通不讲计划模式。但模式仍是存在的。若要按《计划模式》中的分类,这应当归于 Facade 形式。代码在 lapi.c 的 895 行: LUA_API int lua_gc (lua_State *L...
分类:
其他好文 时间:
2014-07-27 10:01:22
阅读次数:
241
今天来说说 write barrier 。在 GC 的扫描过程中,由于分步执行,难免会出现少描了一半时,那些已经被置黑的对象又被修改,需要重新标记的情况。这就需要在改写对象时,建立 write barrier 。在扫描过程中触发 write barrier 的操作影响的对象被正确染色,或是把需要再染...
分类:
其他好文 时间:
2014-07-27 10:01:02
阅读次数:
309
GC 中最繁杂的 mark 部分已经谈完了。剩下的东西很简单。今天一次可以写完。sweep 分两个步骤,一个是清理字符串,另一个是清理其它对象。看代码,lgc.c 573 行:case GCSsweepstring: { lu_mem old = g->totalbytes; s...
分类:
其他好文 时间:
2014-07-27 09:58:12
阅读次数:
383
今天来看一下 mark 过程是怎样实现的。所有的 GC 流程,都从 singlestep 函数开始。singlestep 就是一个最简单的状态机。GC 状态简单的从一个状态切换到下一个状态,循环不止。状态标识放在 global state 的 gcstate 域中。这一点前面谈过。开始的两个状态和 ...
分类:
其他好文 时间:
2014-07-27 09:57:32
阅读次数:
302
普及下常识:GC 是 garbage collector 资源回收器;初期的 Lua GC 采取的是 stop the world 的实现。一旦产生 gc 就需要期待全部 gc 流程走完。lua 自己是个很精简的体系,但不代表处理的数据量也必然很小。从 Lua 5.1 入手下手,GC 的实现改成分步...
分类:
其他好文 时间:
2014-07-27 09:54:52
阅读次数:
262
(1)lua 和 C++之间的交互的基本知识:lua 和 C++ 之间的数据交互通过堆栈进行,栈中的数据通过索引值进行定位,(栈就像是一个容器一样,放进去的东西都要有标号)其中栈顶是-1,栈底是1,也就是第 1 个入栈的在栈底;也可以这么说:正数表示相对于栈底的位置(位移),负数表示相对于栈顶的位置...
分类:
其他好文 时间:
2014-07-27 09:53:53
阅读次数:
436
Lua提供高级的require函数来加载运行库。粗略的说require和dofile完成同样的功能但有两点不同:1.require会搜索目录加载文件2.require会判断是否文件已经加载避免重复加载同一文件。由于上述特征,require在Lua中是加载库的更好的函数。require使用的路径和普通...
分类:
其他好文 时间:
2014-07-26 17:10:21
阅读次数:
350
元表概念:引言:Lua中的每个值都有一套预定义的操作集合,如数字相加等。但无法将两个table相加,此时可通过元表修改一个值的行为,使其在面对一个非预定义的操作时执行一个指定操作。访问机制:一般的元方法都只针对Lua的核心,也就是一个虚拟机。它会检测一个操作中的值是否有元表,这些元表是否定义了关于次...
分类:
其他好文 时间:
2014-07-26 14:48:31
阅读次数:
176