Go

Gestione della memoria

Stack vs heap, escape analysis, garbage collector, profiling della memoria, pprof, memory leaks

24 domande da colloquio·
Senior
1

Qual è la differenza principale tra l'allocazione sulla stack e l'allocazione sull'heap in Go?

Risposta

La stack è gestita automaticamente e le allocazioni sono estremamente veloci (semplice spostamento dello stack pointer). Le variabili sulla stack vengono liberate automaticamente quando la funzione ritorna. L'heap richiede il garbage collector per liberare memoria e le allocazioni sono più lente perché coinvolgono il runtime di Go. Le variabili che sopravvivono oltre la funzione o la cui dimensione non è nota a tempo di compilazione finiscono sull'heap.

2

Che cos'è l'escape analysis in Go?

Risposta

L'escape analysis è un'analisi statica eseguita dal compilatore Go per determinare se una variabile può rimanere sulla stack o deve essere allocata sull'heap. Se il compilatore rileva che una variabile è referenziata al di fuori della sua funzione di creazione (tramite un puntatore restituito, memorizzazione in una variabile globale, ecc.), la variabile 'sfugge' e verrà allocata sull'heap. Questa analisi ottimizza automaticamente le allocazioni di memoria.

3

Come visualizzare i risultati dell'escape analysis durante la compilazione?

Risposta

Il flag -gcflags=-m permette di visualizzare le decisioni dell'escape analysis. Usare -m=2 o -m=3 fornisce più dettagli sul motivo per cui una variabile sfugge. Ad esempio 'go build -gcflags=-m=2' mostrerà messaggi come 'moved to heap: x' per indicare che una variabile è stata spostata sull'heap. Questo strumento è essenziale per ottimizzare le allocazioni di memoria nel codice critico.

4

In quale caso una variabile locale sfugge sull'heap?

5

Qual è il ruolo principale del garbage collector in Go?

+21 domande da colloquio

Padroneggia Go per il tuo prossimo colloquio

Accedi a tutte le domande, flashcards, test tecnici, esercizi di code review e simulatori di colloquio.

Inizia gratis