Страницы

Поиск по вопросам

вторник, 17 декабря 2019 г.

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

#cpp #стек


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

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

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


Ответы

Ответ 1



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

Комментариев нет:

Отправить комментарий