Sobes.tech
Junior — Middle

Programlama dilinde dilimlerin boyutları ve yedek hacimleri nasıl bellekte saklanır?

sobes.tech yapay zeka

AI'dan gelen yanıt

Go dilinde, dilim (slice) üç ana alan içeren bir yapıdır:

  1. Diziye işaretçi — dilimin bellekteki ilk öğesinin adresi.
  2. Uzunluk (len) — okunabilir öğe sayısı.
  3. Kapasite (cap) — dilimin yeni bellek ayırmadan tutabileceği maksimum öğe sayısı.

Bellekte, bir dilim yaklaşık olarak şu şekilde temsil edilir:

type SliceHeader struct {
    Data uintptr // diziye işaretçi
    Len  int     // dilimin uzunluğu
    Cap  int     // dilimin kapasitesi
}

Bir dilim oluştururken, belirli bir kapasiteye sahip bir dizi tahsis edilir. Öğeler eklenirken, uzunluk kapasiteyi aşarsa, daha büyük boyutlarda yeni bir dizi tahsis edilir ve veriler oraya kopyalanır.

Kapasite (capacity) rezervi, belleği verimli yönetmeye olanak tanır ve dilim büyüdükçe tahsisleri azaltır.

Örnek:

s := make([]int, 3, 5) // len=3, cap=5
s = append(s, 4)        // len=4, cap=5
s = append(s, 5)        // len=5, cap=5
s = append(s, 6)        // len=6, cap=10 (yeni bellek tahsis edilir)

Bu şekilde, dilimlerin boyutları ve tahsis edilen kapasiteleri dilim yapısında saklanır ve çalışma sırasında otomatik olarak yönetilir.