Junior — Middle
Jakie rodzaje pamięci istnieją i jak ze sobą współdziałają?
sobes.tech AI
Odpowiedź od AI
W Go (Golang) główne typy pamięci i ich interakcje są następujące:
-
Stos (Stack) — przechowuje lokalne zmienne funkcji. Stos jest szybko przydzielany i zwalniany podczas wywołań i powrotów z funkcji.
-
Sterta (Heap) — używana do dynamicznego przydzielania pamięci, na przykład dla obiektów, które żyją dłużej niż bieżąca funkcja. Go posiada zbieracz śmieci, który zarządza czyszczeniem sterty.
-
Pamięć globalna/statyczna — dla zmiennych i stałych globalnych.
Interakcja:
- Podczas wywołania funkcji lokalne zmienne umieszczane są na stosie.
- Jeśli zmienna ma żyć dłużej, kompilator może "przenieść" ją na stertę (analiza ucieczek).
- Zbieracz śmieci automatycznie zwalnia pamięć na stercie, gdy obiekty stają się niedostępne.
Przykład:
func foo() *int {
x := 10
return &x // x "ucieknie" na stertę, ponieważ zwracany jest wskaźnik
}
Tutaj zmienna x zostanie umieszczona na stercie, aby wskaźnik pozostał ważny po wyjściu z funkcji.