本文简单记录一下 userdata 与 lightuserdata 如何使用。
由于包含示例代码,会有些冗长。
1. userdata 与 lightuserdata 的区别
1、userdata 也可以称为 full userdata,它是完全由 lua gc 管理的一块内存;而 lightuserdata 只保存了一个 c 指针,这块内存的寿命由 c 模块自己管理。
2、userdata 可以有元表,能够模拟出面向对象式的操作;而 lightuserdata 没有元表,类似于一个整数而已,只能作为一个参数传递给一些函数。
3、userdata 通过 void *lua_newuserdata(lua_State *L, size_t size);
创建;而 lightuserdata 通过 void lua_pushlightuserdata(lua_State *L, void *p);
创建。
4、userdata 是一个对象,它只与自身相等;而 lightuserdata 是一个 c 指针值,它与所有表示相同指针值的 lightuserdata 都相等,这也是它的一个重要用法,用于相等性判断,通过 lightuserdata 查找 lua 中的 c 对象。
2. userdata
2.1 关于 userdata
2.2 userdata 的例子
参考: