Sobes.tech
Junior — Middle

Proqramın tərtib olunması və ya icrası zamanı dinamik sahədən avtomatik yaddaş ayırma hansı şərtlərdə baş verir?

sobes.tech Süni İntellekt

AI-dan cavab

Go-da, dinamik sahə (heap) yaddaşın avtomatik ayrılması proqramın icrası zamanı baş verir və tərtibçi və ya işləmə vaxtı hazırkı funksiya və ya gorutindən daha uzun müddət yaşaması lazım olan dəyişəni müəyyən edir.

Heap-ə ayırma şərtləri:

  • Əgər dəyişən bağlama (closure) içində tutulursa və funksiyadan çıxandan sonra istifadə edilə bilər.
  • Əgər dəyişən funksiyadan qaytarılırsa və ya başqa bir gorutinə ötürülürsə.
  • Əgər tərtibçi hazırkı sahədən çıxandan sonra dəyişənin məhv ediləcəyinə zəmanət verə bilməzsə.

Go tərtibçisi qaçış analizini həyata keçirir ki, hansı dəyişənlərin yerdə saxlanmalı və hansılar yığımda yerləşdirilməlidir.

Nümunə:

func f() *int {
    x := 10
    return &x // x "qaçır" heap-ə, çünki göstərici qaytarılır
}

Burada, x heap-də ayrılır, çünki ona işarə edən göstərici qaytarılır və onun sahəsindən kənarda istifadə edilə bilər.