Sobes.tech
Junior

Ի՞նչ է նշանակում, որ հղումները պահվում են ստեկում։

sobes.tech AI

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

Տեղական արժեքային փոփոխականները (տիպեր Int, Bool, Double, String, Struct, Enum), որոնք ստեղծվում են ֆունկցիայի ներսում, պահվում են ստեկում։ Ստեկը հիշողության տարածք է, որը օգտագործվում է տեղական փոփոխականների, ֆունկցիայի պարամետրերի և վերադարձի հասցեների համար։ Այն աշխատում է LIFO (Last In, First Out) սկզբունքով։

Աշխատելու սկզբունքը՝

  1. Տեղադրում՝ երբ ֆունկցիա է կանչվում, ստեղծվում է ստեկային շրջանակ։ Այս ֆունկցիայի տեղական արժեքային փոփոխականները տեղադրվում են այդ շրջանակում։
  2. Մուտք՝ ստեկի վրա փոփոխականներին մուտք գործելը շատ արագ է, քանի որ նրանց հասցեները որոշվում են ստեկային ցուցիչի հարաբերությամբ։
  3. Հանել՝ երբ ֆունկցիան ավարտում է իր գործարկումը, նրա ստեկային շրջանակը (և բոլոր այնտեղ պահվող փոփոխականները) պարզապես հեռացվում են ստեկի վերևից։

Օրինակ՝

func processNumbers() {
    var number1: Int = 10 // number1 պահվում է ստեկում
    let number2: Double = 20.5 // number2 պահվում է ստեկում
    
    // ... օգտագործում number1 և number2
} // processNumbers ֆունկցիայից դուրս գալու ժամանակ, number1 և number2 հեռացվում են ստեկից

Տվյալների տեսակների (Class, Actor) հետ տարբերությամբ, որոնց օրինակները պահվում են heap-ում, իսկ այս օրինակին հղումը պահվում է ստեկում։