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ке жайгаштырылат, ошондо көрсөткүч функциядан чыгып кеткенден кийин да жарактуу болот.