(contributo di Michael Carman)
Di solito non si può. La memoria allocata ai lessicali (cioè le variabili my())
non poò essere recuperata o riutilizzata anche se le variabili vanno al di fuori dello scope.
La memoria è riservata nel caso che le variabili ritornito nello scope. La memoria allocata
alle variabili globali può essere riutilizzata (all'interno del vostro programma) utilizzando
undef() e/o delete().
Sulla maggior parte dei sistemi operativi, la
memoria allocata ad un programma non può essere restituita al sistema.
Questo è il motivo per cui i programmi di lunga esecuzione talvolta
si ri-eseguono. Alcuni sistemi operativi (da rimarcare, i sistemi che usano
mmap(2) per allocare grosse porzioni di memoria) possono chiedere la
restituzione della memoria che non viene piì usata, ma, su tali
sistemi, perl deve essre configurato e compilato affinché usi il
malloc del sistema operativo e non quello del perl.
In generale, l'allocazione di memoria e la deallocazione, in Perl non sono qualcosa
di cui possiate o che dobbiate preoccuparvi molto.
Consultate anche "Come posso fare affinché i miei programmi in Perl occupino meno memoria?"
Ad ogni modo, un uso giudizioso di my() sulle vostre variabili vi
aiuterà ad assicurarvi la loro uscita dallo scope in maniera che
Perl possa liberare quello spazio per usarlo in altre parti del vostro
programma. Una variabile globale, naturalmente, non uscirà mai dallo
scope, per cui non si può avere automaticamente la restituzione del
suo spazio, benché eseguire su di essa un undef() e/o un delete()
otterrà lo stesso effetto. In generale, l'allocazione di memoria e
la deallocazione, in Perl non sono qualcosa di cui possiate o che dobbiate
preoccuparvi molto, ma anche questa proprietà (la preallocazione
di tipi di dato) è in cantiere.
|