Junior — Middle
Kas on võimalik määrata, kas muutuja on salvestatud virnas või mälu piirkonnas?
sobes.tech AI
Vastus AI-lt
Go keeles ei ole otsest viisi määrata, kus täpselt muutuja asub — kas on virnas või virna. Selle otsustab kompilaator escape analüüsi abil. Kui muutuja "põgeneb" väljapoole funktsiooni (näiteks tagastatakse või salvestatakse globaalsesse struktuuri), siis see paigutatakse virna; vastasel juhul — virna.
Näide:
func f() *int {
x := 10
return &x // x "põgeneb" virna
}
func main() {
p := f() // p osutab virnale
}
Siin muutuja x paigutatakse virna, kuna selle aadress tagastatakse funktsioonist. Kuid muutuja täpne asukoht mälus saab määrata ainult kompilaatori sisemiste tööriistade või profiilide abil, mitte standardkoodi kaudu.