В теме еще разбираюсь плохо так что прошу строго не судить.
Насколько я понял, стек в основном нужен для правильного последовательного распределения выполнения функций в программе. Его вместимость ограничена и он может быть переполнен тем самым вызвав ошибку. Ввиду этого у меня возник вопрос: Почему бы чтобы уменьшить заполненность стека по дефолту не кидать все переменные в кучу?
Сам предполагаю что это вызвано тем, что процесс резервирования и освобождения памяти на стеке происходит быстрее чем в куче и по этому было бы рациональнее хранить небольшие данные в нем. Правильно ли я понимаю или нет?
Локальные переменные размещаются в стеке, чтобы быть локальными не только для функции, но и для каждой итерации ее вызова. Когда функция запускает сама себя рекурсивно, она должна получить новый блок памяти под локальные переменные, а при возврате первая должна обратно вернуть свои. И единственное что с точки зрения процессора отличает эти два "экземпляра" функции - указатель базы стека.
Если у вас локальные переменные суммарно хранят большой объем данных (от сотни килобайт и выше), то имеет смысл выделять область в куче, и хранить указатель на нее в стеке.
Почему такой механизм не применяется по умолчанию - потому что это медленнее и в 99% случаев не нужно.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости