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.