lua_pushlightuserdata是Lua C API中的一个函数,其作用是将一个轻量级的用户数据压入栈中。轻量级的用户数据在Lua中是一种特殊的数据类型,在C代码中使用void*来表示。通过lua_pushlightuserdata函数,我们可以将这样的用户数据推入Lua栈中,方便在Lua脚本中进行处理和操作。 2. lua_pushlightuserdata函数的基本用法 lu...
数值常量 从Lua5.3版本开始Lua语言为数值格式提供了两种选择:被称为integer的64位整形和被称为float的双精度浮点类型(注意,"float"代表双精度),对于资源受限的平台,可以使用Lua精简模式,32位整形和单精度浮点型。 具有十进制小数或者指数的数值会被当作浮点类型,否则会被当作整形值。 整形和浮点型值的类型都是"numbe...
专业点,叫做“light userdata”。我在前面总结的userdata叫做“full userdata”。 轻量级userdata是一种表示C指针的值(即void *)。由于它是一个值,所以不用创建它。要将一个轻量级userdata放入栈中,只需要调用lua_pushlightuserdata即可。 voidlua_pushlightuserdata(lua_State *L,void*p); 尽管两种userdata在名称上...
4、轻量级userdata是一种表示C指针的值(即void*),要将一个轻量级userdata放入栈中,只需要调用lua_pushlightuserdata即可。轻量级userdata只是一个指针而已。它没有元表,就像数字一样,轻量级userdata无须受垃圾收集器的管理。 5、Lua在释放完全userdata所关联的内存时,若发现userdata对应的元表还有__gc元方法,则会调用...
在探讨Lua的userdata与C++的交互时,我们首先需要区分全量userdat与轻量的lightuserdata。全量userdat由Lua内部进行内存分配,产生GObject,相对复杂且占用资源较多。相比之下,lightuserdata在C/C++层面仅提供指针类型,通过`lua_pushlightuserdata`函数实现,不涉及Lua内部内存分配,LUA也不负责管理与回收,需...
void lua_pushinteger (lua_State *L, lua_Integer n); 把n作为一个数字压栈。 lua_pushlightuserdata void lua_pushlightuserdata (lua_State *L, void *p); 把一个 light userdata 压栈。 userdata 在 Lua 中表示一个 C 值。 light userdata 表示一个指针。 它是一个像数字一样的值: 你不需要专门...
static int People(lua_State *L) { // 对象分配在C语言的堆内存中,并不在Lua中 People *pPeople = new People(); lua_pushlightuserdata(L, pPeople); return 1; // 新的lightuserdata已经在栈上了 } 上面函数会创建一个LightUserData对象在Lua中,对象为一个指针,指向一片内存地址,不存储实际的内存数...
(2)轻量级用户数据是一个代表C语言指针的值,即它是一个 void*值。因为轻量级用户数据是一个值而不是一个对象, 所以无须创建它(就好比我们也不需要创建数值)。要将一个轻量级用户数据放入栈中,可以调用lua_pushLightuserdata。 (3)轻量级用户数据的真正用途是相等性判断。由于完全用户数据是一个对象,因此它只和自...
lightuserdata:lightuserdata是userdata的一种特殊形式,它是一个指针值,不具备元表和垃圾回收功能。lightuserdata通常用于在Lua和C/C++之间传递简单的指针或句柄。 分类:lightuserdata是Lua中的一种类型,用于表示指针或句柄。 优势:lightuserdata的优势在于可以高效地在Lua和C/C++之间传递指针或句柄。 应用场景:lightuserda...
在这个例子中,`lua_pushlightuserdata` 函数将一个C指针 `myObj` 转换为轻量 `userdata` 并压入Lua栈。在Lua中,可以获取这个轻量 `userdata` 并在需要时将其转换回C指针。 完全`userdata` 原理。 完全`userdata` 是由Lua分配的一块内存区域,用于存储C数据。可以通过 `lua_newuserdata` 函数在Lua中创建完全...