Sobes.tech
Junior — Middle

Pod kojim uslovima dolazi do automatskog dodeljivanja memorije iz dinamičke oblasti tokom kompilacije ili izvršavanja programa?

sobes.tech АИ

Одговор од АИ

U Go, automatska alokacija memorije iz dinamičkog područja (heap) dešava tokom izvršavanja programa, kada kompajler ili runtime odrede da promenljiva treba da traje duže od trenutne funkcije ili gorutine.

Uslovi pod kojima se dešava alokacija u heap-u:

  • Ako je promenljiva uhvaćena u zatvaranju (closure) i može se koristiti nakon izlaska iz funkcije.
  • Ako se promenljiva vraća iz funkcije ili prosleđuje drugoj gorutini.
  • Ako kompajler ne može garantovati da će promenljiva biti uništena nakon izlaska iz trenutnog opsega.

Kompajler Go vrši analizu bekstva (escape analysis) da odredi koje promenljive treba da budu smeštene u hrpu, a koje na steku.

Primer:

func f() *int {
    x := 10
    return &x // x "beži" u heap, jer se vraća pokazivač
}

Ovde, x se alocira u heap-u jer se vraća pokazivač na nju i može se koristiti van njenog opsega.