Sobes.tech
Junior — Middle

Ինչպե՞ս է հիշողության մեջ պահվում կտրումների չափերը և պահուստային ծավալները ծրագրավորման լեզվում։

sobes.tech AI

Պատասխան AI-ից

Go լեզվում, սլայսը (slice) կառուցվածք է, որը պարունակում է երեք հիմնական դաշտեր՝

  1. Արագացուցիչ զանգվածի հասցե — սլայսի առաջին տարրին հիշողության հասցեն:
  2. Երկարություն (len) — հասանելի տարրերի քանակը:
  3. Հզորություն (cap) — առավելագույն տարրերի քանակը, որը սլայսը կարող է պարունակել առանց նոր հիշողություն հատկացնել:

Հիշողության մեջ սլայսը ներկայացված է մոտավորապես այսպես՝

type SliceHeader struct {
    Data uintptr // հասցե դեպի զանգված
    Len  int     // սլայսի երկարությունը
    Cap  int     // սլայսի հզորությունը
}

Սլայս ստեղծելիս, հատկացվում է որոշ հզորությամբ զանգված։ Եթե տարրեր ավելացնելիս երկարությունը գերազանցում է հզորությունը, ապա հատկացվում է նոր մեծածավալ զանգված և տվյալները պատճենվում են այնտեղ։

Հատկացված հզորությունը (capacity) թույլ է տալիս արդյունավետ կառավարել հիշողությունը՝ նվազեցնելով հատկացման քանակը սլայսի աճի ժամանակ։

Օրինակ՝

s := make([]int, 3, 5) // երկարություն=3, հզորություն=5
s = append(s, 4)        // երկարություն=4, հզորություն=5
s = append(s, 5)        // երկարություն=5, հզորություն=5
s = append(s, 6)        // երկարություն=6, հզորություն=10 (նոր հիշողություն հատկացվում է)

Այսպիսով, սլայսերի չափերը և պահեստավորված հզորությունները պահվում են սլայսի կառուցվածքում և ավտոմատ կերպով կառավարվում during գործարկման։