Распределение стека в C - PullRequest
       14

Распределение стека в C

8 голосов
/ 14 марта 2010

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

Ответы [ 5 ]

15 голосов
/ 14 марта 2010

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

3 голосов
/ 14 марта 2010

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

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

  • Необходимый размер неизвестен до времени выполнения.
  • Требуется много памяти (мегабайт); что может вызвать проблемы в системах, где размеры стеков обычно ограничены двузначными числами в мегабайтах.
1 голос
/ 14 марта 2010

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

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

1 голос
/ 14 марта 2010

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

0 голосов
/ 14 марта 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...