Utilizzo della memoria delle variabili globali e locali

2

Sono un principiante nel codice C. Sto scrivendo un codice C in cui una variabile è richiesta per essere utilizzata da diverse funzioni. Voglio chiedere se usare una variabile globale e manipolarla attraverso le funzioni o dichiararla come variabile locale e passare dalla funzione alla funzione come argomento.

La mia comprensione è che se lo dichiaro come variabile globale, lo stesso spazio di memoria verrà utilizzato da diverse funzioni mentre se lo uso come locale, verrà utilizzata più memoria, come verrà definita e dichiarata ogni volta che viene chiamata la funzione . È vero?

    
posta T.Mali 04.04.2016 - 10:12
fonte

1 risposta

4

Prima di tutto, "definire" e "dichiarare" sono cose che fai nel codice sorgente, piuttosto che in fase di runtime. Alcune dichiarazioni e definizioni di variabili corrispondono al codice macchina effettivo che viene eseguito, mentre altre no. Per quanto ne so, la definizione di un parametro funzione aggiuntivo o di una variabile locale non genererà alcun codice macchina aggiuntivo, ma cambierà semplicemente il numero di byte che i puntatori frame / stack / etc della CPU vengono spostati come parte della chiamata alla funzione.

Ciò che è vero è che la memoria per un parametro di funzione viene allocata nello stack ogni volta che viene chiamata tale funzione (dai puntatori sopra menzionati che vengono spostati), mentre la memoria per una variabile globale viene allocata solo una volta. In questo senso hai assolutamente ragione. Ma la memoria allocata da quelle chiamate di funzione sarà immediatamente deallocata quando la funzione termina, mentre la memoria della variabile globale deve restare in piedi per l'intera lunghezza del programma. In questo senso "verrà utilizzata più memoria" non è proprio corretto.

Naturalmente, questo sarebbe un motivo molto sciocco per usare una variabile globale , perché qualsiasi modifica nell'uso della memoria o nelle prestazioni di runtime è probabile che sia estremamente piccola o totalmente inesistente, aggiungendo al contempo variabili globali non serve solitamente a rendere i programmi molto più fragili e non testabili a lungo termine (vedi Perché lo stato globale è così malvagio? per ulteriori informazioni al riguardo). Sicuramente non farlo a meno che non abbiate dati concreti dagli strumenti di profilazione che mostrano che la variabile globale "ottimizzazione" è in realtà una grande vittoria sulle prestazioni della variabile locale.

    
risposta data 04.04.2016 - 10:38
fonte

Leggi altre domande sui tag