Sobes.tech
Junior — Middle

Кайсы түрдөгү эс тутумдар бар жана алар бири-бири менен кантип өз ара аракеттенет?

sobes.tech AI

AIден жооп

Go (Golang) тилинде негизги эс тутум түрлөрү жана алардын өз ара аракеттешүүсү төмөндөгүчө:

  • Stack (Stack) — функциялардын жергиликтүү өзгөрмөлөрүн сактайт. Stack тез бөлүнүп берилет жана функциядан кайтып келгенде бошотулат.

  • Heap (Heap) — динамикалык эс тутум бөлүштүрүү үчүн колдонулат, мисалы, учурдагы функциядан узак жашаган объекттер үчүн. Goда garbage collector бар, ал heapти тазалоону башкарат.

  • Глобал/статикалык эс тутум — глобалдык өзгөрмөлөр жана константалар үчүн.

Өз ара аракеттешүү:

  • Функция чакырылганда, жергиликтүү өзгөрмөлөр stackке жайгаштырылат.
  • Эгер өзгөрмө узак жашоо керек болсо, компилятор аны "escape analysis" аркылуу heapке которушу мүмкүн.
  • Garbage collector автоматтык түрдө heapтеги эс тутумду бошотот, объекттер жеткиликтүү болбой калганда.

Мисал:

func foo() *int {
    x := 10
    return &x // x "бүркүт" heapке өтөт, анткени көрсөткүч кайтарылат
}

Бул жерде, x өзгөрмөсү heapке жайгаштырылат, ошондо көрсөткүч функциядан чыгып кеткенден кийин да жарактуу болот.