Sobes.tech
Junior — Middle

Dasturlash tilida kesimlarning o'lchamlari va zaxira hajmlari qanday saqlanadi?

sobes.tech AI

AIdan javob

Go tilida, dilim (slice) uchta asosiy maydonlarni o'z ichiga olgan tuzilma:

  1. Massivga ishoratchi — dilimning birinchi elementining xotiradagi manzili.
  2. Uzunlik (len) — o'qish uchun mavjud bo'lgan elementlar soni.
  3. Kapasite (cap) — yangi xotira ajratmasdan dilimga sig'dira oladigan maksimal elementlar soni.

Xotirada, dilim taxminan quyidagicha ifodalanadi:

type SliceHeader struct {
    Data uintptr // massivga ishoratchi
    Len  int     // dilim uzunligi
    Cap  int     // dilimning kapasitesi
}

Dilim yaratishda, belgilangan kapasitaga ega massiv ajratiladi. Elementlar qo'shilganda, uzunlik kapasitani oshib ketganda, katta o'lchamdagi yangi massiv ajratiladi va ma'lumotlar unga ko'chiriladi.

Rezerv qilingan (capacity) xotira boshqaruvni samarali qilish uchun imkon beradi, dilim o'sishi bilan ajratmalar sonini kamaytiradi.

Misol:

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 (yangi xotira ajratiladi)

Shu tarzda, dilimlarning o'lchamlari va rezerv qilingan kapasiteleri dilim tuzilmasida saqlanadi va ishga tushirilganda avtomatik boshqariladi.