Sobes.tech
Junior — Middle

Programma çalıştırılırken bellek içinde dilimleme genellikle nerede ve nasıl gerçekleştirilir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, dilim (slice), üç alan içeren bir veri yapısıdır: bellekteki bir diziye işaretçi, uzunluk (len) ve kapasite (cap). Program çalışırken, dilim yığında (eğer yerel ise) saklanır ve gösterdiği dizi, duruma bağlı olarak yığında veya statik bellekte yer alır.

Bir dilim oluşturulduğunda, örneğin s := make([]int, 5, 10), yığında 10 elemanlık bir dizi tahsis edilir ve dilim, bu dizinin başlangıcına işaretçi, 5 uzunluk ve 10 kapasite içerir. Bir fonksiyona dilim geçirildiğinde, sadece dilim yapısı (3 alan) kopyalanır, tüm dizi değil, bu da bellek açısından etkilidir.

Örnek:

s := []int{1, 2, 3}
// s - [1,2,3] dizisine işaretçi, uzunluk=3, kapasite=3 içeren yapı

func appendValue(slice []int, val int) []int {
    return append(slice, val)
}

s = appendValue(s, 4)

Burada, append kapasite yetersizse yeni bir dizi tahsis edebilir ve yeni dizi ile birlikte yeni bir dilim dönebilir.