Go (Golang) İleri Seviye Bellek & Derleyici

Escape Analysis: Belleğin Stack mi Heap mi Olduğuna Karar Verme

Go derleyicisinin "Bu değişken fonksiyondan kaçtı mı?" dedektifliği.

5 Yaşındaki Çocuğa Anlatır Gibi (Analoji)

Bir toplantıda aldığın geçici not masada kalır (Stack). Ama toplantıdan sonra patrona verdiğin rapor şirketin ortak arşivine kaldırılır (Heap).

Teknik & Mimari Tanım

Go derleyicisi derleme anında (go build -gcflags="-m") Escape Analysis yapar. Bir fonksiyonun içinde üretilen değişkenin adresi (pointer) fonksiyon dışına döndürülürse değişken Stack'ten Heap'e kaçar (escapes to heap). Heap'e giden nesneler Garbage Collector tarafından toplanır.

Mülakatta Ne Demelisin? (Kurtarıcı Altın Cevap)

“Stack tahsisleri sıfır maliyetlidir çünkü fonksiyon bitince Stack pointer geri çekilir. Heap tahsisleri ise GC yükü yaratır. Go derleyicisi bir nesnenin ömrünün fonksiyon kapsamını aştığını tespit ederse onu otomatik olarak Heap'e taşır.”

Go (Golang) Örnek Uygulaması
func createPointer() *int {
    x := 42
    return &x // x fonksiyon dışına kaçtı! Heap'e taşınır (Escaped to heap)
}

func createValue() int {
    y := 42
    return y // Stack'te kopyalanır, GC yükü yok!
}
Mülakat Tuzağı & Adayların En Sık Yaptığı Hata:

Her şeyi pointer ile dönmenin her zaman daha hızlı olduğunu sanmak; bazen küçük struct'ları değer olarak dönmek Heap tahsisini önlediği için çok daha hızlıdır.