Sobes.tech
Senior

Hol lesz az array és a map — a heapen vagy a stacken?

sobes.tech MI

Válasz az MI-től

Go-ban a tömbök általában a veremben helyezkednek el, ha méretük ismert fordítási időben, és nem túl nagyok. Ez azért van, mert a tömbök fix méretű értékek. Azonban, ha a tömb mutatóként kerül átadásra vagy olyan szerkezetben használják, amely a halomra van allokálva, akkor a tömb is a halmon lesz.

A Go-ban a térkép egy hivatkozási típus, amely belülről egy mutatóval van megvalósítva egy halomon lévő adatszerkezetre. Ezért a térkép mindig a halmon helyezkedik el, még akkor is, ha a térkép változó helyben van deklarálva.

Példa:

func példa() {
    var arr [10]int       // verembeli tömb
    m := make(map[int]int) // halmon lévő térkép
    _ = arr
    _ = m
}