Go

Zarządzanie pamięcią

Stack vs heap, escape analysis, garbage collector, profilowanie pamięci, pprof, wycieki pamięci

24 pytań z rozmów·
Senior
1

Jaka jest główna różnica między alokacją na stosie (stack) a alokacją na stercie (heap) w Go?

Odpowiedź

Stos jest zarządzany automatycznie, a alokacje są niezwykle szybkie (proste przesunięcie wskaźnika stosu). Zmienne na stosie są automatycznie zwalniane, gdy funkcja zwraca wartość. Sterta wymaga garbage collectora do zwolnienia pamięci, a alokacje są wolniejsze, ponieważ angażują runtime Go. Zmienne, które przetrwają poza funkcją lub których rozmiar nie jest znany w czasie kompilacji, trafiają na stertę.

2

Czym jest escape analysis w Go?

Odpowiedź

Escape analysis to analiza statyczna wykonywana przez kompilator Go w celu ustalenia, czy zmienna może pozostać na stosie, czy musi zostać zaalokowana na stercie. Jeśli kompilator wykryje, że zmienna jest referencjonowana poza funkcją, w której ją utworzono (poprzez zwrócony wskaźnik, zapis w zmiennej globalnej itp.), zmienna 'ucieka' i zostanie zaalokowana na stercie. Ta analiza automatycznie optymalizuje alokacje pamięci.

3

Jak zobaczyć wyniki escape analysis podczas kompilacji?

Odpowiedź

Flaga -gcflags=-m pozwala zobaczyć decyzje escape analysis. Użycie -m=2 lub -m=3 dostarcza więcej szczegółów na temat tego, dlaczego zmienna ucieka. Na przykład 'go build -gcflags=-m=2' wyświetli komunikaty takie jak 'moved to heap: x', wskazując, że zmienna została przeniesiona na stertę. To narzędzie jest niezbędne do optymalizacji alokacji pamięci w krytycznym kodzie.

4

W jakim przypadku zmienna lokalna ucieka na stertę?

5

Jaka jest główna rola garbage collectora w Go?

+21 pytań z rozmów

Opanuj Go na następną rozmowę

Uzyskaj dostęp do wszystkich pytań, flashcards, testów technicznych, ćwiczeń code review i symulatorów rozmów.

Zacznij za darmo