Domanda

[Ho letto il manuale di Lua, ma non ha fornito risposte solide.]

Diciamo che ho una tabella Lua, che funge da matrice indicizzata:

local myArray = {};
myArray[1] = "Foo";
myArray[2] = "Bar";

Come posso smaltire al meglio questa tabella? Ho appena impostato myArray su zero? Oppure devo scorrere attraverso l'array e impostare ogni elemento indicizzato su zero?

Allo stesso modo, diciamo che ho un tavolo Lua, che funge da dizionario:

local myDictionary = {};
myDictionary["key1"] = "Foo";
myDictionary["key2"] = "Bar";

Posso semplicemente impostare 'myDictionary' su zero o devo scorrere?

Infine, cosa devo fare, per quanto riguarda la gestione della memoria, dove ho annidato le tabelle? per es.

local myNestedCollection = {};
myNestedCollection[1] = {1, 2, 3};
myNestedCollection[2] = {4, 5, 6};

Devo scorrere tutte queste sotto-tabelle, impostandole su zero? Grazie per l'aiuto.

È stato utile?

Soluzione

Nella maggior parte dei GC verrà raccolto un oggetto quando non ci sono riferimenti ad esso. L'impostazione della parte superiore della catena di riferimento su zero rimuove un riferimento ai bambini. Se quello era l'unico riferimento, i bambini verranno raccolti.

Altri suggerimenti

Dovrebbe essere sufficiente solo impostare la variabile locale su nil ; non è necessario scorrere tutte le chiavi e impostarle su nil su. Secondo questa pagina , Lua utilizza un algoritmo di raccolta dei rifiuti mark-and-sweep. Non appena si imposta la variabile locale su nil , le chiavi nella sua tabella diventano irraggiungibili, quindi verranno raccolte dal garbage collector nella raccolta successiva. Allo stesso modo, se anche quegli oggetti sono tabelle, anche le loro chiavi diventeranno irraggiungibili, quindi anche loro saranno raccolte.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top