Vi espongo un mio personale dubbio, perche' vi ho visto molto esperti in ambito informatico.
Per semplicita' e per fissare le idee mi riferiro' alla programmazione da linguaggio C, ma i discorsi potrebbero essere portati ugualmente per i linguaggi del Pascal, del Fortran (quello moderno, con i puntatori e le allocazioni dinamiche di memoria) ed altri.
Un programma ha fondamentalmente due tipi di variabili:
a) Quelle allocate nelle sezioni globali (global section)
b) Quelle allocate nelle sezioni locali a una routine od una funzione (local section)
Le prime sono variabili visibili in qualunque punto del programma, mentre le seconde sono tipicamente allocate sullo stack all'interno di uno scope e l'area di memoria ad esse dedicata viene normalmente deallocata alla chiusura dello scope, quando lo stack per l'appunto si svolge. Le prime corrispondono a variabili C dichiarate global o static o piu' semplicemente anche a variabili dichiarate automatic ma al di fuori dallo scope del main (cioe' al di fuori di tutti gli scope). Le seconde sono appunto variabili implicitamente od esplicitamente dichiarate automatic all'interno di uno scope di una funzione.
Ed adesso veniamo al dunque.
Parliamo delle variabili globali o statiche. Ci sono fondamentalmente due modi per scrivere in un assoluto (cioe' in un eseguibile) l'allocazione dedicata alle variabili e cioe'
a) Scrivere l'indirizzo di memoria e la quantita' di byte da allocare per la variabile
b) Scrivere l'indirizzo di memoria e poi preallocare nell'eseguibile una sequenza di byte che verranno mappati in memoria a tempo di esecuzione (at run time) all'indirizzo prescelto per la variabile. In Unix ad esempio questo corrisponderebbe a mappare dentro l'eseguibile diversi shared segment in corrispondenza delle variabili staticheo globali.
Per quanto possa sembrare strano la mia impressione personale e' che molti sistemi facciano uso del metodo (b). Questo significa in altre parole che all'atto della compilazione deve essere effettuata una mappa in memoria per tutte le variabili di tipo statico o globale, mappa che poi viene riversata direttamente nell'eseguibile. Se questo e' vero allora su sistemi di sviluppo del software se ci sono molti programmi che dichiarano sezioni globali per variabili di dimensioni corpose, allora la compilazione concorrente dei programmi potrebbe portare ad un utilizzo consistente della memoria virtuale.
Chi sa se viene utilizzato il metodo (a) od il metodo (b) ?
Opinioni in merito sono gradite.
Regards,
Francesco 8)



LinkBack URL
About LinkBacks



Segnalibri