Предположим следующую ситуацию:
typedef struct rgb_t {float r,g,b} rbg_t;
// a function for allocating the rgb struct
rgb_t* rgb(r,g,b) {
rgb_t* c = malloc(sizeof(rgb_t));
c->r=r;
c->g=g;
c->b=b;
return c;
}
// expose rgb creation to lua
int L_rgb (lua_State* L) {
rgb_t** ud = (rgb_t **) lua_newuserdata(L, sizeof(rgb_t *));
*ud = rgb(lua_tonumber(L,1),lua_tonumber(L,2),lua_tonumber(L,3));
return 1;
}
Когда функция L_rgb вызывается из Lua, происходит два выделения. Lua выделяет новые пользовательские данные, а функция конструктора rgb выделяет для структуры. Что происходит с переменной userdata, когда переменная выходит из области видимости в Lua? Если это сборка мусора, что происходит с распределением структуры?