Junior — Middle
Ի՞նչ տեսակի հիշողություններ կան և ինչպես են դրանք փոխազդում միմյանց հետ։
sobes.tech AI
Պատասխան AI-ից
Go (Golang) լեզվում հիմնական հիշողության տեսակներն ու նրանց փոխազդեցությունը հետևյալն են.
-
Ստակ (Stack) — պահպանում է ֆունկցիաների տեղական փոփոխականները: Ստակը արագ է տրամադրվում և ազատվում է ֆունկցիաների կանչումից և վերադարձից:
-
Հեպ (Heap) — օգտագործվում է դինամիկ հիշողության բաժանման համար, օրինակ՝ օբյեկտների համար, որոնք ապրում են ավելի երկար, քան ընթացիկ ֆունկցիան: Go-ն ունի գարշահավաք, որը կառավարում է հեպի մաքրման գործընթացը:
-
Գլոբալ/ստատիկ հիշողություն — գլոբալ փոփոխականների և կոնստանտների համար:
Հարաբերություն:
- Ֆունկցիայի կանչի ժամանակ, տեղական փոփոխականները տեղադրվում են ստակին:
- Եթե փոփոխականը պետք է ապրի ավելի երկար, կոմպիլյատորը կարող է այն "փախչել" հեպ (escape analysis):
- Գարշահավաքը ավտոմատ կերպով ազատում է հեպի հիշողությունը, երբ օբյեկտները դառնում են հասանելի:
Օրինակ:
func foo() *int {
x := 10
return &x // x "փախչում" է հեպ, քանի որ վերադարձվում է ցուցիչ
}
Այստեղ, փոփոխական x-ը կտեղադրվի հեպում, որպեսզի ցուցիչը մնում է վավեր ֆունկցիայից դուրս գալուց հետո։