• Regolamento Macrocategoria DEV
    Prima di aprire un topic nella Macrocategoria DEV, è bene leggerne il suo regolamento. Sei un'azienda o un hosting/provider? Qui sono anche contenute informazioni per collaborare con Sciax2 ed ottenere l'accredito nella nostra community!

Guida Esercizio di C #2 - Media aritmetica fra due numeri

@habbo9898

l'aspetto negativo dell'uso delle variabili globali è il consumo di memoria fisso , non è questo il caso, ma immagina di avere 50/100 funzioni e usano tutte variabili globali ...ora lo spazio occupato da quelle variabile non verrà liberato fino alla sua chiusura.
Il mio consiglio , è abituati a scrivere usando variabili locali quando puoi. Limitati ad usare le variabili globali quando sono strettamente necessarie.
 
@habbo9898

l'aspetto negativo dell'uso delle variabili globali è il consumo di memoria fisso , non è questo il caso, ma immagina di avere 50/100 funzioni e usano tutte variabili globali ...ora lo spazio occupato da quelle variabile non verrà liberato fino alla sua chiusura.
Il mio consiglio , è abituati a scrivere usando variabili locali quando puoi. Limitati ad usare le variabili globali quando sono strettamente necessarie.

Scusa @TBH, avrei un dubbio.
Il fatto è questo ora:

- Le variabili globali sono un allocazione di memoria sempre disponibile in qualsiasi punto del programma ed uno spazio in memoria occupato perennemente durante l'esecuzione;
- Le variabili locali nel momento in cui la funzione che la sta utilizzando finisce perdono il loro valore ( a meno di dichiararle di tipo static e tornando allo stesso punto delle variabili globali ), ma lo spazio in memoria occupato non dovrebbe lasciarlo libero.

Partendo da questi presupposti noi possiamo utilizzare un puntatore con cui allochiamo una variabile tramite la funzione malloc, e alla fine della funzione, liberare lo spazio in memoria di cui non abbiamo più bisogno.

Ho dimenticato qualcosa riguardo ai due tipi di dichiarazione di variabili?

EDIT:

Edito per aggiungere un'altra cosa:

La differenza sostanziale alla fin fine sarebbe che:

- Le variabili globali sono allocate dall'inizio alla fine del programma.
- Le variabili locali vengono allocate solo se richiamate ( quindi se per esempio una funzione non viene chiamata, le sue variabili non vengono allocate ).

Ma entrambe le allocazioni restano sempre in memoria fino alla chiusura del programma.

( Ho riscritto quello che avevo già scritto più o meno, però credo di averlo scritto meglio )
 
Ultima modifica:
E' giusto quello che ha scritto @Rikku : la differenza sta nel fatto che le variabili globali vengono allocate tutte insieme dato che serviranno in più parti del programma, mentre quelle locali verranno allocate mano a mano che il programma ne farà uso. La memoria non si libera finché non è il programmatore, tramite apposite istruzioni, ad indicare al programma di rilasciare la memoria occupata da un oggetto ( vedi per esempio il metodo Dispose() del .NET Framework ). In C non ho idea se sia possibile una cosa del genere ( tranne per la funzione free() quando si tratta di puntatori ), mi avete fatto venire una curiosità perciò mi documenterò a dovere.
 
@Rikku allora , dato che l'allocazione di tali variabile è gestito dallo stack quest'ultime vengono eliminate
@System32 con free liberi la memoria del heap , quella sullo stack viene gestita automaticamente.

Inviato dal mio GT-S6500 con Tapatalk 2
 
Ultima modifica:
l'uso delle variabili globali comporta l'allocazione su stack di variabili che durante l'arco del programma possono non essere utilizzate. ^^

Questo accade se colui che scrive il codice non ha un minimo di logica e di conoscenza perché le variabili globali nel caso in cui servano davvero vanno utilizzate, anche se il programma possiede chissà quante funzioni, strutture e quant'altro. In base al programma che si vuole scrivere bisogna sapere se utilizzare o variabili globali, o locali o addirittura entrambe. Come dico sempre : bisogna saper programmare.
 
@Rikku per un momento mi stavi facendo confondere :emoji_relieved:. Infatti riflettendoci un pò su e dato che avevo scritto allocazione sullo stack...


Inviato dal mio GT-S6500 con Tapatalk 2
 
E' giusto quello che ha scritto @Rikku : la differenza sta nel fatto che le variabili globali vengono allocate tutte insieme dato che serviranno in più parti del programma, mentre quelle locali verranno allocate mano a mano che il programma ne farà uso. La memoria non si libera finché non è il programmatore, tramite apposite istruzioni, ad indicare al programma di rilasciare la memoria occupata da un oggetto ( vedi per esempio il metodo Dispose() del .NET Framework ). In C non ho idea se sia possibile una cosa del genere ( tranne per la funzione free() quando si tratta di puntatori ), mi avete fatto venire una curiosità perciò mi documenterò a dovere.

Nel C non è possibile liberare la memoria occupato da un oggetto.

Infatti solo nelle nuove versioni dei linguaggi viene usato il Garbage Collector che effettua questo compito autonomamente. @System32
@TBH: Sorry, non era mia intenzione, era invece mia intenzione parlare di qualcosa che potrebbe servire a tutti xD