Sobes.tech
Junior — Middle

Ի՞նչ տեսակի հիշողություններ կան և ինչպես են դրանք փոխազդում միմյանց հետ։

sobes.tech AI

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

Go (Golang) լեզվում հիմնական հիշողության տեսակներն ու նրանց փոխազդեցությունը հետևյալն են.

  • Ստակ (Stack) — պահպանում է ֆունկցիաների տեղական փոփոխականները: Ստակը արագ է տրամադրվում և ազատվում է ֆունկցիաների կանչումից և վերադարձից:

  • Հեպ (Heap) — օգտագործվում է դինամիկ հիշողության բաժանման համար, օրինակ՝ օբյեկտների համար, որոնք ապրում են ավելի երկար, քան ընթացիկ ֆունկցիան: Go-ն ունի գարշահավաք, որը կառավարում է հեպի մաքրման գործընթացը:

  • Գլոբալ/ստատիկ հիշողություն — գլոբալ փոփոխականների և կոնստանտների համար:

Հարաբերություն:

  • Ֆունկցիայի կանչի ժամանակ, տեղական փոփոխականները տեղադրվում են ստակին:
  • Եթե փոփոխականը պետք է ապրի ավելի երկար, կոմպիլյատորը կարող է այն "փախչել" հեպ (escape analysis):
  • Գարշահավաքը ավտոմատ կերպով ազատում է հեպի հիշողությունը, երբ օբյեկտները դառնում են հասանելի:

Օրինակ:

func foo() *int {
    x := 10
    return &x // x "փախչում" է հեպ, քանի որ վերադարձվում է ցուցիչ
}

Այստեղ, փոփոխական x-ը կտեղադրվի հեպում, որպեսզի ցուցիչը մնում է վավեր ֆունկցիայից դուրս գալուց հետո։