Зачем выделять память для переменных в стеке?

174
24 апреля 2019, 05:20

В теме еще разбираюсь плохо так что прошу строго не судить.

Насколько я понял, стек в основном нужен для правильного последовательного распределения выполнения функций в программе. Его вместимость ограничена и он может быть переполнен тем самым вызвав ошибку. Ввиду этого у меня возник вопрос: Почему бы чтобы уменьшить заполненность стека по дефолту не кидать все переменные в кучу?

Сам предполагаю что это вызвано тем, что процесс резервирования и освобождения памяти на стеке происходит быстрее чем в куче и по этому было бы рациональнее хранить небольшие данные в нем. Правильно ли я понимаю или нет?

Answer 1

Локальные переменные размещаются в стеке, чтобы быть локальными не только для функции, но и для каждой итерации ее вызова. Когда функция запускает сама себя рекурсивно, она должна получить новый блок памяти под локальные переменные, а при возврате первая должна обратно вернуть свои. И единственное что с точки зрения процессора отличает эти два "экземпляра" функции - указатель базы стека.

Если у вас локальные переменные суммарно хранят большой объем данных (от сотни килобайт и выше), то имеет смысл выделять область в куче, и хранить указатель на нее в стеке.

Почему такой механизм не применяется по умолчанию - потому что это медленнее и в 99% случаев не нужно.

READ ALSO
Неправильный выбор конструктора

Неправильный выбор конструктора

Почему эта программа выводит doubledouble, я же явно указываю int?!

159
Обращение к структуре ProcessStartupInformation через wmi в C++

Обращение к структуре ProcessStartupInformation через wmi в C++

Пытаюсь разобраться с wmi, использую последний снипет из статьи Calling a Provider Method Не могу понять как указать ProcessStartupInformation для Win32_ProcessCreate на примере...

157
Задача K Минимум в Полиноме

Задача K Минимум в Полиноме

Вот такая задача на Нахождение K-ого минимума, написал такой код(На базовых примерах работает, на тестах все кроме 1 завалены): Помогите найти...

121
Как работает vector?

Как работает vector?

Почему пример ниже выводит 6?

143