Sobes.tech
Junior — Middle

Kādi ir atmiņas veidi un kā tie savstarpēji mijiedarbojas?

sobes.tech AI

Atbilde no AI

Go (Golang) valodā galvenie atmiņas tipi un to mijiedarbība ir šādi:

  • Steks (Stack) — glabā funkciju vietējās mainīgās. Steks tiek ātri piešķirts un atbrīvots, izsaucot un atgriežoties no funkcijām.

  • Heap (Heap) — tiek izmantots dinamiskai atmiņas piešķiršanai, piemēram, objektiem, kas dzīvo ilgāk nekā pašreizējā funkcija. Go ir atkritumu savācējs, kas pārvalda heap tīrīšanu.

  • Globālā/statiskā atmiņa — globālajiem mainīgajiem un konstantiem.

Sadarbība:

  • Funkcijas izsaukuma laikā vietējās mainīgās tiek novietotas stekā.
  • Ja mainīgais jādzīvo ilgāk, kompilators to var "pārvietot" uz heap (escape analysis).
  • Atkritumu savācējs automātiski atbrīvo heap atmiņu, kad objekti kļūst nepieejami.

Piemērs:

func foo() *int {
    x := 10
    return &x // x "bēg" uz heap, jo tiek atgriezts norādītājs
}

Šeit mainīgais x tiks novietots heapā, lai norādītājs paliktu derīgs pēc funkcijas iziešanas.