Junior — Middle
Какви видове памет съществуват и как взаимодействат помежду си?
sobes.tech AI
Отговор от AI
В Go (Golang) основните типове памет и тяхното взаимодействие са следните:
-
Стек (Stack) — съхранява локалните променливи на функциите. Стекът се разпределя и освобождава бързо при извикване и връщане от функции.
-
Куча (Heap) — използва се за динамично разпределение на памет, например за обекти, които живеят по-дълго от текущата функция. Go има събирач на отпадъци, който управлява почистването на кучата.
-
Глобална/статична памет — за глобални променливи и константи.
Взаимодействие:
- При извикване на функция, локалните променливи се поставят в стека.
- Ако променлива трябва да живее по-дълго, компилаторът може да я "пренесе" в кучата (escape analysis).
- Събирачът на отпадъци автоматично освобождава паметта в кучата, когато обектите станат недостъпни.
Пример:
func foo() *int {
x := 10
return &x // x "бяга" в кучата, тъй като се връща указател
}
Тук променливата x ще бъде поставена в кучата, за да остане валиден указателят след изхода от функцията.