В программировании стек (
stack) — это структура данных и область памяти, используемая для хранения временных данных. В зависимости от контекста, стек может существовать в нескольких местах.🟠Стек вызовов (Call Stack)
Это главная область памяти в оперативной памяти (RAM), где хранятся:
- Локальные переменные функций.
- Адреса возврата после завершения функции.
- Контекст выполнения программы.
func functionA() {
functionB()
}
func functionB() {
print("Вызов B")
}
functionA()func infiniteRecursion() {
infiniteRecursion() // ❌ Бесконечный вызов
}🟠Стек в структуре данных (например, `Array`)
В Swift можно реализовать стек вручную, используя массив (
Array).struct Stack<T> {
private var elements: [T] = []
mutating func push(_ item: T) {
elements.append(item)
}
mutating func pop() -> T? {
return elements.popLast()
}
}
var stack = Stack<Int>()
stack.push(10)
stack.push(20)
print(stack.pop()!) // 20🟠Потоковый стек (Thread Stack)
Каждый поток (
Thread) в многопоточном программировании получает свой стек.DispatchQueue.global().async {
print("Фоновый поток")
}
print("Главный поток")🟠Стек в автоматическом управлении памятью (ARC)
Swift использует Automatic Reference Counting (ARC) для управления памятью.
Когда объект больше не нужен, он удаляется из памяти (в том числе из стека).
func createPerson() {
let person = "Иван" // Создаётся в стеке
print(person)
}
createPerson() // Переменная person удаляется при выходе из функцииСтавь 👍 и забирай 📚 Базу знаний