Используется для статического выделения памяти
Чаще всего принцип работы стека сравнивают со стопкой тарелок: чтобы взять вторую сверху, нужно снять верхнюю (LIFO - last in, first out - последний пришел, первый вышел).
Благодаря своей природе процесс добавления и получения данных из стека очень быстрый, так как мы можем только класть что-то наверх стопки и брать можем тоже что-то сверху
Из вышесказанного вытекает ограничение стека - данные, которые мы храним на стеке, должны иметь фиксированный размер, известный во время компиляции программы (compile time)
Данные на стеке хранятся в Stack frames
Многопоточные приложения могут иметь по стеку на каждый поток
Управление памятью стека - простое и понятное и осуществляется операционной системой
Типичными типами данных, которые хранятся на стеке являются примитивы, типы данных, передающиеся по значению, указатели на данные в куче
Стек может переполниться (знаменитый stack overflow), потому что он имеет ограничение по размеру. Проще всего увидеть это при вызове рекурсивной функции с глубокой вложенностью (в хроме не более 16тыс. фреймов)