Supponendo la seguente situazione:Lua: garbage collection + datiutente
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;
}
Quando la funzione L_rgb viene chiamata da Lua due assegnazioni accada. Lua alloca nuovi dati utente e la funzione di costruzione rgb alloca per la struct. Cosa succede alla variabile userdata quando la variabile esce dallo scope in Lua? Se è raccolta la spazzatura, cosa succede all'assegnazione della struttura?
alleggerirà le allocazioni di tracciamento: sugli errori Lua e sui riavvolgitori, il GC di Lua traccerà e rilascerà i blocchi di codice come appropriato. – u0b34a0f6ae
C'è una modifica che puoi aiutare qui: http://stackoverflow.com/questions/41080633/can-i-load-additional-functions-in-base-open-without-breaking-lua-state? – displayname