Go

Speicherverwaltung

Stack vs Heap, Escape Analysis, Garbage Collector, Memory-Profiling, pprof, Memory Leaks

24 Interview-Fragen·
Senior
1

Was ist der Hauptunterschied zwischen Stack- und Heap-Allokation in Go?

Antwort

Der Stack wird automatisch verwaltet und Allokationen sind extrem schnell (einfache Bewegung des Stack-Pointers). Variablen auf dem Stack werden automatisch freigegeben, wenn die Funktion zurückkehrt. Der Heap benötigt den Garbage Collector, um Speicher freizugeben, und Allokationen sind langsamer, da sie die Go-Runtime einbeziehen. Variablen, die über die Funktion hinaus überleben oder deren Größe zur Compile-Zeit nicht bekannt ist, landen auf dem Heap.

2

Was ist Escape Analysis in Go?

Antwort

Escape Analysis ist eine statische Analyse, die der Go-Compiler durchführt, um zu bestimmen, ob eine Variable auf dem Stack bleiben kann oder auf dem Heap allokiert werden muss. Wenn der Compiler erkennt, dass eine Variable außerhalb ihrer Erstellungsfunktion referenziert wird (über einen zurückgegebenen Zeiger, Speicherung in einer globalen Variable usw.), 'entkommt' die Variable und wird auf dem Heap allokiert. Diese Analyse optimiert Speicherallokationen automatisch.

3

Wie kann man die Ergebnisse der Escape Analysis während der Kompilierung ansehen?

Antwort

Das Flag -gcflags=-m ermöglicht es, die Entscheidungen der Escape Analysis anzusehen. Die Verwendung von -m=2 oder -m=3 liefert mehr Details darüber, warum eine Variable entkommt. Zum Beispiel zeigt 'go build -gcflags=-m=2' Meldungen wie 'moved to heap: x' an, um anzuzeigen, dass eine Variable auf den Heap verschoben wurde. Dieses Tool ist unerlässlich, um Speicherallokationen in kritischem Code zu optimieren.

4

In welchem Fall entkommt eine lokale Variable auf den Heap?

5

Was ist die Hauptaufgabe des Garbage Collectors in Go?

+21 Interview-Fragen

Meistere Go für dein nächstes Interview

Zugang zu allen Fragen, Flashcards, technischen Tests, Code-Review-Übungen und Interview-Simulatoren.

Kostenlos starten