Junior — Middle
Кадом намудҳои хотира вуҷуд доранд ва онҳо чӣ гуна бо ҳам муошират мекунанд?
sobes.tech AI
Ҷавоб аз AI
Дар Го (Golang), асосий хотира турлари ва уларнинг ўзаро таъсири қуйидагича:
-
Тўп (Stack) — функцияларнинг маҳаллий ўзгарувчиларини сақлайди. Тўп тез ажратилади ва функциядан қайтганда озод қилинади.
-
Хўп (Heap) — динамик хотира ажратиш учун қўлланилади, масалан, ҳозирги функциядан узоқроқ яшайдиган объектлар учун. Goда мусаффо йиғувчи мавжуд бўлиб, у хўпни тозалашни бошқаради.
-
Глобал/статик хотира — глобал ўзгарувчилар ва константалар учун.
Ўзаро таъсир:
- Функция чақирилганда, маҳаллий ўзгарувчилар тўпга жойлаштирилади.
- Агар ўзгарувчи узоқроқ яшаши керак бўлса, компилятор уни "қочиш таҳлили" орқали хўпга ўтказиши мумкин.
- Мусаффо йиғувчи автоматик равишда хўпдаги хотирани озод қилади, вақте объектлар етиб бўлмай қолса.
Misol:
func foo() *int {
x := 10
return &x // x "қочиб" хўпга ўтади, чунки кўрсаткич қайтарилади
}
Бу ерда, x ўзгарувчиси хўпга жойлаштирилади, шунда кўрсаткич функциядан чиқиб кетгандан кейин ҳам тўғри бўлади.