最新 | 最热门 | 最高评价

+0  Lua和C语言的交互(三)

Tag: C and Lua | c# | Lua
lishen 发于 2013年03月23日 17:09 | 点击: 1161 | 展开摘要
自定义数据类型: 我们通过使用C语言实现一个Lua数组来演示Lua实现自定义用户数据。数组的结构如下所示: typedef struct NumArray{ int size; //表示数组的大小 double values[]; //此处的values仅代表一个double*类型的指针,values指向NumArray结构后部紧跟的数据的地址 } NumArray; 我们实现四个函数new,get,set和size,分别用来完成数组的新建,读取,写入和获取大小。在Lua中用

查看全文: http://www.udpwork.com/item/10068.html

+0  Lua和C语言的交互(二)

Tag: C and Lua | c# | Lua
lishen 发于 2013年03月12日 21:05 | 点击: 1119 | 展开摘要
转载请标明出处http://www.grati.org/?p=666 C调用Lua函数 不要怀疑,对Lua函数的调用也是通过栈来进行的。请看如下代码: Lua代码: function lua_func (x, y) print("Parameters are: ", x, y) return (x^2 * math.sin(y))/(1-x) end C代码: double c_func(lua_State *L, double x, double y){ double z;

查看全文: http://www.udpwork.com/item/10069.html

+0  Lua和C语言的交互(一)

Tag: C and Lua | c# | Lua
lishen 发于 2013年03月09日 21:28 | 点击: 1199 | 展开摘要
Lua生来就是为了和C交互的,因此使用C扩展Lua或者将Lua嵌入到C当中都是非常流行的做法。要想理解C和Lua的交互方式,首先要回顾一下C语言是如何处理函数参数的。 C函数和参数 大家知道C语言是用汇编实现的,在汇编语言中可没有函数的概念,与函数对应的是叫做子过程的东西,子过程就是一段指令,一个子过程与它调用的子过程之间通过栈来进行参数的传递交互。在一个子过程在调用别的子过程之前,会按照约定的格式将要调用的子过程需要的参数入栈,在被调用的子过程中,可以按照约定的规则将参数从

查看全文: http://www.udpwork.com/item/10070.html

+0  Lua和NodeJS

Tag: C and Lua | Lua | NodeJS
lishen 发于 2013年02月02日 22:44 | 点击: 1721 | 展开摘要
编程模型的思考 一年前,迷恋了NodeJS一段时间,因为换工作的原因一年多没有再关注。但是NodeJS这种单线程全异步的编程模型给了我很多启发,在大多数情况下可以极大的简化程序的编写并保持相对较高的性能。其实大多数的应用场景也都是遵循20-80原则的。即百分之20的流程花费了百分之80的时间,剩余百分之80的的流程只花费百分之20的时间。而花费时间比较多的流程又分为CPU密集型和IO密集型,对于CPU密集型的流程可以引入多线程的机制充分利用CPU,对于IO密集型可以使用异步I

查看全文: http://www.udpwork.com/item/10071.html

+0  C# 版的 Lua

Tag: lua与虚拟机
云风 发于 2013年02月01日 14:13 | 点击: 2893 | 展开摘要
我们游戏客户端使用了 Unity3D , 我们不打算给它写 C 插件, 所有的开发都在 mono 中进行的。

由于某些需求,我们需要在客户端解析一些 Lua 脚本(这些脚本同时供我们的服务器使用)。所以,就有了阿楠同学开发的 UniLua 。

这个世界上已经有了很多的 .net 版的 Lua 实现,但是都不完整。它们大多是基于 Lua 5.1 甚至更老的版本的。还有一些只能解析 Lua 的字节码(这样很容易实现),而不能让 Lua 源代码直接工作起来。这使得在 Lua 中

查看全文: http://www.udpwork.com/item/9196.html

+0  温故而知新

Tag: lua与虚拟机
云风 发于 2013年01月30日 16:38 | 点击: 936 | 展开摘要
我上次通读 Lua 的源代码时,Lua 还在 5.1 。当然 Lua 5.0 我也读过,4.0 和 3.2 则读的不多。

最近有一点空闲,想续写我那本 Lua 源码欣赏。按我心里的计划,还有大约 6 章。虚拟机、字节码持久化、C API 、解释器、GC、库函数。

新添了一章关于虚拟机的,所以重新读了一遍相关源码。发现 Lua 5.2 比上一版修改了不少,几乎每个位置都有修订。

自己读代码和写出来给人看又是不同,真的逐行推敲的话,之前的理解也是经不起琢磨的。为什么要写

查看全文: http://www.udpwork.com/item/9184.html

+0  为 Lua 绑定 C/C++ 对象

Tag: lua与虚拟机
云风 发于 2013年01月10日 11:58 | 点击: 1050 | 展开摘要
如何绑定 C/C++ 对象到 Lua 里?通常是创建一个 userdata ,存放 C/C++ 对象指针,然后给 userdata 添加元表,用 index 元方法映射 C/C++ 中的对象方法。

也有另一个手段,直接用 lightuserdata 保存 C/C++ 对象指针放到 Lua 中,在 Lua 中创建一个 table 附加元表来来包装这个指针,效果是类似的。区别在于对象生命期的管理方式有所不同。就这个问题,几年前我写过一篇 blog 。

绑定 C/C++ 对象到

查看全文: http://www.udpwork.com/item/9052.html

+1  Luacc

Tag: lua与虚拟机
云风 发于 2012年12月14日 15:39 | 点击: 1005 | 展开摘要
因为内存限制问题, 我们暂时放弃了 luajit 。这两天,我想另辟蹊径找到别的方法去加速 lua 程序的运行。

所以我这两天做了这么一个玩具,试一下是否可行。

luacc 是类似 cython 的东西,它允许你在 Lua 代码中直接写 C 代码。由于是用 tcc 运行时编译运行的,所以你可以获得和 C 一样的效率。(同样,C 语言引入的问题也同样要考虑)

之所以我称之为玩具,是因为它现在还不支持复杂的数据结构。你只能把单层的,以 string 为 key 的 lua

查看全文: http://www.udpwork.com/item/8857.html

+0  一个 Lua 内存泄露检查工具

Tag: lua与虚拟机
云风 发于 2012年12月12日 14:31 | 点击: 2300 | 展开摘要
昨天我们发现每日构建的服务器突然在一个晚上内存暴增了 8 G ,显然是发生了内存泄露。

之前,我们在 skynet 里留下了许多调试协议,使我们很快的确定了发生泄露的服务:在一张地图的 lua State 中。可以确定是地图的 lua 实现中,有些 lua 对象在不断的生成。生成速度不快,但确实没有人解开引用,导致内存持续增长。

曾经有很多人做过 Lua 的内存分析工具,但是我懒的去搜了,花了半天时间自己写了一个。(已经开源在 github 上)

原理是这样的:

这个

查看全文: http://www.udpwork.com/item/8840.html

+0  Lua 字节码与字符串的共享

Tag: lua与虚拟机 | 优化与技巧
云风 发于 2012年11月16日 15:40 | 点击: 1435 | 展开摘要
我们的系统的应用场合比较特殊,在同一个进程内存在数千个 lua_State 。

Lua 的虚拟机占用的内存已经足够小了,但还是抗不住数量多啊。所以我希望有版本节约一些内存。

最想做的一件事情是把不同 lua_State 中相同的函数字节码合并起来共用一块内存。要做到这一点并不复杂。而且可以提高一些内存访问的效率。(因为大部分 lua 程序在并行执行相同的逻辑)

首先我们需要准备一个用来共享数据块的模块,它必须是线程安全的。因为既然分到了不同的 lua_State 就是想

查看全文: http://www.udpwork.com/item/8597.html

+1  开发笔记(28) : 重构优化

Tag: lua与虚拟机 | 游戏开发
云风 发于 2012年11月05日 10:37 | 点击: 1224 | 展开摘要
正如上一篇笔记 记载的,我们第 2 里程碑按计划在 9 月 30 日完成,但因为赶进度,有许多 bug 。性能方面也有很大问题,大家都认为需要重构许多模块。所以,在最后几天修补 bug 时,许多补丁是临时对付的(因为整个模块都需要重写了)。为此,我们留下了一个月专门重构代码、修改 bug 、并对最后的结果再做一次评测。

这项工作,终于如期完成了。

半个多月前在白板上留下的工作计划还没擦掉。我列出了 12 点需要改进或重写的地方,考虑到内容较多,又去掉了 3 项。在大家的通

查看全文: http://www.udpwork.com/item/8509.html

+0  让 LuaJIT 2.0 支持 Lua 5.2 中的 _ENV 特性

Tag: lua与虚拟机
云风 发于 2012年10月25日 15:12 | 点击: 1551 | 展开摘要
我们的项目是用 Lua 5.2 标准来写的, 最近想迁移到 LuaJIT 2.0 中。其中碰到的最大障碍是,LuaJIT 2.0 不支持 Lua 5.2 中的 _ENV 特性。而且,看起来将来也不会支持了。

在邮件列表中,LuaJIT 的作者 Mike 看起来很不喜欢这个新特性。

可是我真的需要它,所以只好自己阅读 luajit 的源代码,给它打了个 patch 支持这个特性。

patch (基于 luajit 2.0 的 beta 11) 如下:

diff --gi

查看全文: http://www.udpwork.com/item/8455.html
|<<<45678910>>>| 一共10页, 118条记录