
Gestione della memoria
Stack vs heap, escape analysis, garbage collector, profiling della memoria, pprof, memory leaks
1Qual è la differenza principale tra l'allocazione sulla stack e l'allocazione sull'heap in Go?
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.
2Che cos'è l'escape analysis in Go?
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.
3Come visualizzare i risultati dell'escape analysis durante la compilazione?
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.
In quale caso una variabile locale sfugge sull'heap?
Qual è il ruolo principale del garbage collector in Go?
+21 domande da colloquio
Altri argomenti di colloquio Go
Fondamenti di Go
Strutture dati in Go
Interfacce in Go
Gestione degli errori
Goroutine di base
Channels
Go Modules
Server HTTP
Client HTTP
Codifica JSON
Database/SQL
Pacchetto context
Testing
Pattern di concorrenza
Primitive di sincronizzazione
Framework web Go
Progettazione di API REST
gRPC
Reflection
Ottimizzazione delle prestazioni
Generics
Go Design Patterns
Microservices
Sicurezza e autenticazione
Docker & Containerization
Kubernetes Basics
Go Avanzato
Sviluppo CLI
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