Junior — Middle
Milyen memória típusok léteznek, és hogyan működnek együtt?
sobes.tech MI
Válasz az MI-től
A Go (Golang) nyelvben a memória fő típusai és azok kölcsönhatásai a következők:
-
Verem (Stack) — a függvények helyi változóit tárolja. A verem gyorsan allokálódik és szabadul fel a függvényhívások során.
-
Heap (Heap) — dinamikus memóriafoglalásra szolgál, például olyan objektumok számára, amelyek hosszabb ideig élnek, mint a jelenlegi függvény. A Go rendelkezik szemétgyűjtővel, amely kezeli a heap tisztítását.
-
Globális/statikus memória — globális változók és konstansok számára.
Interakció:
- Függvényhíváskor a helyi változók a verembe kerülnek.
- Ha egy változónak hosszabb életre van szüksége, a fordító "kiszökés-elemzéssel" áthelyezheti a heapbe.
- A szemétgyűjtő automatikusan felszabadítja a heapen lévő memóriát, amikor az objektumok elérhetetlenné válnak.
Példa:
func foo() *int {
x := 10
return &x // x "elmenekül" a heapbe, mivel mutatóként visszaadódik
}
Ebben az esetben a x változó a heapbe kerül, hogy a mutató érvényes maradjon a függvény kilépése után is.