Supposant la situation suivante:Lua: collecte des ordures + userdata
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;
}
Lorsque la fonction est appelée à partir L_rgb Lua deux allocations se produisent. Lua alloue de nouvelles données utilisateur et la fonction constructeur rgb alloue pour la structure. Qu'advient-il de la variable userdata lorsque la variable sort du champ d'application de Lua? Si ce sont les ordures collectées, qu'arrive-t-il à l'allocation de la structure?
La méthode n ° 2 vous soulagera des allocations de suivi - sur les erreurs Lua et les retours de pile, le GC de Lua suivra et relâchera les blocs de code selon les besoins. – u0b34a0f6ae
Y at-il un changement, vous pouvez aider ici: http://stackoverflow.com/questions/41080633/can-i-load-additional-functions-in-base-open-without-breaking-lua-state? – displayname