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