
Zarządzanie pamięcią
Stack vs heap, escape analysis, garbage collector, profilowanie pamięci, pprof, wycieki pamięci
1Jaka jest główna różnica między alokacją na stosie (stack) a alokacją na stercie (heap) w Go?
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ę.
2Czym jest escape analysis w Go?
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.
3Jak zobaczyć wyniki escape analysis podczas kompilacji?
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.
W jakim przypadku zmienna lokalna ucieka na stertę?
Jaka jest główna rola garbage collectora w Go?
+21 pytań z rozmów
Inne tematy rekrutacyjne Go
Podstawy Go
Struktury danych w Go
Interfejsy w Go
Obsługa błędów
Podstawy goroutines
Channels
Go Modules
Serwer HTTP
Klient HTTP
Kodowanie JSON
Database/SQL
Pakiet context
Testing
Wzorce współbieżności
Prymitywy synchronizacji
Frameworki webowe Go
Projektowanie API REST
gRPC
Reflection
Optymalizacja wydajności
Generics
Go Design Patterns
Microservices
Bezpieczeństwo i uwierzytelnianie
Docker & Containerization
Kubernetes Basics
Zaawansowany Go
Tworzenie CLI
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