Junior — Middle
Programın derlenmesi veya çalıştırılması sırasında dinamik alandan otomatik bellek tahsisi hangi koşullarda gerçekleşir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Go'da, dinamik alan (heap) belleğin otomatik tahsisi, program çalışırken gerçekleşir ve derleyici veya çalışma zamanı, bir değişkenin mevcut fonksiyon veya goroutine'den daha uzun süre yaşaması gerektiğine karar verir.
Heap'e tahsis edilen durumlar:
- Eğer değişken bir kapanışta yakalanmışsa ve fonksiyon dışından kullanılabiliyorsa.
- Eğer değişken fonksiyondan döndürülüyorsa veya başka bir goroutine'e aktarılıyorsa.
- Eğer derleyici, değişkenin mevcut kapsamdan çıktıktan sonra yok edileceğini garanti edemiyorsa.
Go derleyicisi, hangi değişkenlerin yığında, hangilerinin ise yığında tutulması gerektiğini belirlemek için kaçış analizi yapar.
Örnek:
func f() *int {
x := 10
return &x // x "kaçıyor" heap'e, çünkü bir gösterici döndürülüyor
}
Burada, x heap'te tahsis edilir çünkü ona işaret eden gösterici döndürülür ve kapsamı dışında kullanılabilir.