Reference counting: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
SieBot (discussione | contributi)
m Bot: Aggiungo: es:Conteo de referencias
 
(19 versioni intermedie di 17 utenti non mostrate)
Riga 1:
{{SF|terminologia informatica|febbraio 2013}}
{{S|terminologia informatica}}
In informatica, il '''reference counting''' ("contatore dei riferimenti") è una tecnica di memorizzazione del numero di riferimenti, puntatori o [[handle]] a una risorsa come un oggetto o un blocco di memoria.
 
E'È tipicamente usato come metodo per deallocare oggetti che non sono più usati in modo automatico e sicuro.
 
==Usi nel garbage collection==
 
Il reference counting è spesso noto come un [[algoritmo]] di [[garbage collection]] dove ciascun oggetto contiene un contatore del numerinumero di riferimenti tenuti da altri oggetti. Se il contatore dei riferimenti di un oggetto raggiunge lo zero, l'oggetto diviene inaccessibile e viene messo nella lista degli oggetti da distruggere.
 
Un semplice reference coutingcounting richiede di essere spesso aggiornato. Quando un [[Riferimento (informatica)|riferimento]] viene distrutto o riscritto, il contatore dei riferimenti viene decrementato, mentre quando un riferimento viene creato o copiato, il contatore dei riferimenti viene incrementato.
 
Il reference counting è anche usato nelle operazioni sui [[Sistema operativo|sistemi operativi]] su disco o distribuiti, dove un completo garbage collection che traccia i riferimenti in un [[grafo]] o in un [[Albero (informatica)|albero]] è troppo oneroso computazionalmente.
 
== Vantaggi e svantaggi ==
[[Categoria:Terminologia informatica]]
I vantaggi del reference counting sono che è molto più veloce di qualsiasi altro algoritmo di garbage collection.
 
Lo svantaggio principale è che bisogna mantenere e gestire un contatore per ogni oggetto che è continuamente aggiornato.
[[de:Referenzzählung]]
 
[[en:Reference counting]]
L'algoritmo presenta il problema dei riferimenti circolari:
[[es:Conteo de referencias]]
 
[[ja:参照カウント]]
Si considerino due oggetti (A e B) che puntano l'uno all'altro.
[[pl:Reference counting]]
 
Sia A che B hanno due riferimenti:
 
* Quello della variabile che li contiene (diretto)
* Quello dell'oggetto che punta a loro (indiretto)
 
Quando uno dei due oggetti esce dal suo scope, non è più accessibile tramite la sua variabile e la sua memoria non può essere liberata, dal momento che un altro oggetto la sta referenziando (rischio di [[Dangling pointer|dangling reference]]) mentre l'effetto esterno è quello di un [[memory leak]].
 
La soluzione è utilizzare algoritmi di [[rilevamento dei cicli]] con adozione di riferimenti deboli. I riferimenti circolari sono esplicitamente marcati come deboli e non considerati dal reference counting.
 
==Interpretazione in teoria dei grafi==
 
Quando si considerano gli schemi di garbage collection, è spesso utile pensare al grafo delle referenze, che è un [[grafo]] direzionato dove i vertici sono gli oggetti e c'è una connessione da un oggetto A ad uno B se A ha un riferimento a B. Si possono anche avere vertici speciali per rappresentare le variabili locali e le referenze bloccate dal sistema runtime, e nessuna connessione può raggiungere questi nodi sebbene da questi nodi possano partire link ad altri nodi.
 
In questo contesto, il semplice contatore di referenze di un oggetto è il numero delle sue connessioni.
 
Se un oggetto non può mai essere distrutto in questo tipo di grafi viene rappresentato da un nodo con un loop, cioè da un link a se stesso.
 
Essendo due oggetti concatenati fra loro è necessario gestire un contatore per ogni oggetto e, nel caso uno dei due oggetti esca dal suo scope non è più accessibile tramite la sua variabile e inoltre la sua memoria non può essere liberata in quanto un altro oggetto lo sta referenziando.
 
Questo dà effetto ad un memory leak (consumo eccessivo di memoria), per evitare ciò e quindi liberare la memoria devo cancellare i due oggetti concatenati.
 
{{Portale|informatica}}
 
[[Categoria:Terminologia informatica]]