转自lua程序设计第二版
light userdata轻量级userdata
一种表示C指针的值(即void *),由于是一个值,所以不用创建它。要将一个轻量级userdata放入栈中,只需调用lua_pushlightuserdata
void lua_pushlightuserdata(lua_State *L,void *p);
轻量级userdata不是缓冲,而是一个指针而已,没有元表,就像数字一样,轻量级userdata无需受垃圾收集器的管理。
有时会将轻量级userdata当做一种廉价的完全userdata来使用。但这种做法并没有太大意义。首先使用轻量级userdata时用户必须自己管理内存,因为轻量级userdata不属于垃圾收集的范畴。
完全userdata的开销并不比轻量级userdata打多少。它们只为分配内存增加了一些malloc的开销。
轻量级userdata的真正用途是相等性判断。一个完全userdata是一个对象,它至于自身相等。
一个轻量级userdata则表示了一个C指针的值,因此,它与所有表示同一个指针的轻量级userdata时相等的,可以将轻量级userdata用于查找lua中的C对象。