Выделение стека в C

Это - плохой стиль для разработки простых программ C для выделения всего или большинства все, на стеке?

8
задан JT. 14 March 2010 в 08:26
поделиться

5 ответов

Основным преимуществом кучи является то, что вы можете динамически выделять для нее память. Если вы не знаете размер нужной вам переменной: сложите ее в кучу.

Если ваша программа проста, вам может не понадобиться выделять переменную в куче; но выбор не зависит от сложности программы, он зависит от вашей потребности в переменной. Если вам нужно получить доступ / изменить переменную на протяжении всего рабочего процесса с помощью нескольких функций, тогда лучше в куче. Вы освободите ее, когда она вам больше не понадобится. Если переменная является просто структурой опций или счетчиком, стек идеально подходит для этого.

1
ответ дан 5 December 2019 в 08:23
поделиться

Выделение стека дешевле, чем выделение кучи. Выделение и удаление из стека - это простое увеличение и уменьшение счетчика при входе/выходе функции (точнее, области видимости). Выделение из кучи означает поиск достаточно большого блока памяти в возможно фрагментированном адресном пространстве. Поэтому выделение стека почти всегда предпочтительнее.

Основными причинами отказа от использования стека являются:

  • Необходимый размер не известен до выполнения программы.
  • Требуется много памяти (мегабайты), что может вызвать проблемы на системах, где размер стека обычно ограничен двузначным числом мегабайт.
3
ответ дан 5 December 2019 в 08:23
поделиться

Если делать упор на ПРОСТЫЕ программы, как вы заявили, то нет, это не так уж и плохо :) Вы также можете взглянуть на массивы переменной длины в C99 (вот простой пример: http://en.wikipedia.org/wiki/Variable-length_array).

1
ответ дан 5 December 2019 в 08:23
поделиться

Нет. Если только у вас нет переменных с нефиксированным размером. Такой код может быстро привести к переполнению стека.

0
ответ дан 5 December 2019 в 08:23
поделиться

Это плохой стиль - использовать выделение кучи, если вам это не нужно. Особенно в простых программах.

15
ответ дан 5 December 2019 в 08:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: