Sobes.tech
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.