Newsgroup: it.comp.lang.c
Titolo: garbage collection ?

Sto scrivendo un piccolo programma per il quale mi serve un parere.
Il seguente codice dovrebbe tener traccia di tutti i puntatori che
vengono allocati nel corso del programma per poter liberare la memoria
al momento, ad esempio, di una uscita improvvisa.
Ho riscritto la funzione "malloc()" per questa esigenza.
Il codice funziona, ma volevo solo sapere se questo e' cio' che si
intende solitamente per "garbage collection" o se questo termine
identifica qualcos'altro.
Grazie ;)
#include <stdio.h>
#include <stdlib.h>
typedef struct tag_elemento {
                  void * p ;
                  /* puntatore allocato */
                  struct tag_elemento * prossimo ;
                  /* prossimo nella lista */
               }  elemento ;
static elemento * lista_allocati = NULL ;
void inserimento ( elemento * * testa, void * p )
{
     if (*testa == NULL)
     {
        *testa = malloc ( sizeof ( elemento ) ) ;
        (*testa)->prossimo = NULL ;
        (*testa)->p = p ;
     }
     else inserimento ( &(*testa)->prossimo, p ) ;
}
void distruggi ( elemento * testa )
{
     if (testa != NULL)
     {
        distruggi ( testa->prossimo ) ;
        free ( testa->p ) ;
        free ( testa ) ;
     }
}
void scrivi ( elemento * testa )
{
     static int i ;
     if (testa != NULL)
     {
        printf("%d) p = %pX\n", i++, testa->p) ;
        scrivi ( testa->prossimo ) ;
     }
}
void * mia_malloc ( size_t q )
{
       void * p = malloc ( q ) ;
       inserimento ( &lista_allocati, p ) ;
       return p ;
}
int main()
{
    char *p1 ;
    int  *p2 ;
    long *p3 ;
    p1 = mia_malloc ( sizeof ( char ) ) ;
    p2 = mia_malloc ( sizeof ( int ) ) ;
    p3 = mia_malloc ( sizeof ( long ) ) ;
    scrivi ( lista_allocati ) ;
    return 0 ;
}
Andrea Laforgia

 identifica qualcos'altro.
Per "garbage collection" si intende il recupero delle aree di memoria
deallocate o non piu accessibili per utilizzarle per nuove allocazioni.
Il tuo programma si appoggia sulla malloc e la free quindi il recupero
di memoria avviene secondo le poliche implementate da queste funzioni.
Ciao.
-- 
     (ZZZ)       Filippo Salotti, Bagni di Lucca, Lucca, Italy.
    //   \\  _                 E-mail : 
fil...@humnet.unipi.it
   /Y\    ZD<_o===============================================o
 .oZZZZZo.     | Studente Ingegneria Informatica Automatica  |
<OXXXXXXXO>    | Dip. Sistemi Elettrici Universita' di Pisa. |

 identifica qualcos'altro.
In effetti la garbage collection riguarda i sistemi in cui l'allocazione
di memoria non viene richiesta esplicitamente. Il meccanismo di
allocazione è implicito e la liberazione avviene "appena possibile" dopo
che il blocco allocato è divenuto "orfano".
EMG

rilasciata automaticamnete.
Questo pero' dando per scontato che ci sia "qualcosa" che la liberi.
Io, pero', non voglio appoggiarmi a questo "qualcosa".
Nel senso che voglio deallocare personalmente tutta la memoria
occupata.
Andrea Laforgia

comunque.
Perche' voglio farlo personalmente.
Andrea Laforgia

Ciao,
    dai un'occhiata al sito 
www.relisoft.com
 (che consiglio a tutti).
C'e' un'area intitolata "Losing Memory", magari puo' esserti di aiuto.
A presto :-)
Marco Abis su IRCnet #C++Warriors
http://welcome.to/C++Warriors
  interamente dedicato al C++
ca...@technologist.com


ICQ #34602650

Grazie ;)
No. Un gc non si limita a tener traccia della memoria allocata, ma anche la 
dealloca automaticamente quando non e' piu' in uso - cioe' quando tutti i 
puntatori a quella zona di memoria vanno fuori scope.
Saluti,
 Cris

Grazie a tutti per le risposte ! ;)
Andrea Laforgia

 occupata.
Nel caso il tuo processo venga killato credo che tu non possa fare
niente, tu lavori a livello utente, non a livello sistema dove invece
lavora lo scheduler.


lavora lo scheduler.
mi sembra di capire che tutti voi intendiate Linux come sysop
in dos / winxx non č strano il caso di un processo che termini anormalmente
e blocchi parti della memoria (o risorse) fino al prossimo riavvio della
macchina
TobiX

 occupata.
ma se il tuo programma muore tu non hai piu' il controllo su di esso...
E comunque su Unix quel qualcuno esiste sempre...
ciaoz
Ho talmente fame che il mio stomaco fa tutt'uno con la spina dorsale
--
Michel <ZioBudda> Morelli		  
mic...@michel.enter.it
 
http://ziobudda.enter.it
Problemi con Linux ?    mailto:
li...@saturn.media.dsi.unimi.it

 macchina
Sai fornire un esempio di risorse non liberate anche per WinNT?
-----------== Posted via Deja News, The Discussion Network ==----------
http://www.dejanews.com/
       Search, Read, Discuss, or Start Your Own    


Certo prova a mandare in bomba un programma che utilizza la
sheda sonora
e poi
prova ad utilizzare questa scheda....
sentirai che musica !!!!
ciao achille
