Sobes.tech
Junior — Middle

Кадом намудҳои хотира вуҷуд доранд ва онҳо чӣ гуна бо ҳам муошират мекунанд?

sobes.tech AI

Ҷавоб аз AI

Дар Го (Golang), асосий хотира турлари ва уларнинг ўзаро таъсири қуйидагича:

  • Тўп (Stack) — функцияларнинг маҳаллий ўзгарувчиларини сақлайди. Тўп тез ажратилади ва функциядан қайтганда озод қилинади.

  • Хўп (Heap) — динамик хотира ажратиш учун қўлланилади, масалан, ҳозирги функциядан узоқроқ яшайдиган объектлар учун. Goда мусаффо йиғувчи мавжуд бўлиб, у хўпни тозалашни бошқаради.

  • Глобал/статик хотира — глобал ўзгарувчилар ва константалар учун.

Ўзаро таъсир:

  • Функция чақирилганда, маҳаллий ўзгарувчилар тўпга жойлаштирилади.
  • Агар ўзгарувчи узоқроқ яшаши керак бўлса, компилятор уни "қочиш таҳлили" орқали хўпга ўтказиши мумкин.
  • Мусаффо йиғувчи автоматик равишда хўпдаги хотирани озод қилади, вақте объектлар етиб бўлмай қолса.

Misol:

func foo() *int {
    x := 10
    return &x // x "қочиб" хўпга ўтади, чунки кўрсаткич қайтарилади
}

Бу ерда, x ўзгарувчиси хўпга жойлаштирилади, шунда кўрсаткич функциядан чиқиб кетгандан кейин ҳам тўғри бўлади.