Плохой ли стиль для разработки ваших простых программ на C для размещения всего или всего всего в стеке?Распределение стека в C
ответ
Плохой стиль использования распределения кучи, если вам это действительно не нужно. Особенно в простых программах.
Я бы больше, чем +1, если мог. Распределение стека безопасно, предотвращает утечку памяти и устраняет проблемы с указателем нулевого или мусора. Используйте его, когда это возможно. – kyoryu
+1 - Абсолютно - куча представляет собой более сложную структуру данных, чем стек, а не только лишние накладные расходы во многих случаях, но и причину ненужной сложности с такими потенциальными проблемами, как оборванные указатели, утечка памяти, повреждение кучи и т. Д. Нет причин избегать кучи, когда это необходимо, но, конечно, это опция «когда это необходимо», а не разумный вариант по умолчанию. – Steve314
И нет кучи в C. –
Если мы делаем упор на программы SIMPLE, как вы сказали, то нет, это не так уж плохо :) Вы также можете взглянуть на массивы переменной длины C99 (вот простой пример: http://en.wikipedia.org/wiki/Variable-length_array).
+1 Для упоминания VLA. Я использовал их в небольшом проекте, и они помогали избегать распределения кучи большую часть времени. – helpermethod
Нет. Если у вас нет переменных с нефиксированным размером. Такой код может довольно быстро переходить на переполнение стека.
Распределение стеков дешевле, чем распределение кучи. Выделение и освобождение из стека - это просто счетчик приращений и декретов по функции (или, если быть точнее: область), вход/выход. Выделение кучи означает поиск достаточно большого блока памяти в возможно фрагментированном адресном пространстве. Из-за этого распределение стека почти всегда предпочтительнее.
Основными причинами, не используя стек являются:
- Размер требуется не известно до времени выполнения.
- Необходимо много памяти (мегабайт); что может вызвать проблемы в системах, где размеры стека обычно ограничены двузначными числами мегабайт.
Или если требуется большая память (Kilobytes); что может вызвать проблемы в системах, где размеры стека обычно ограничены двузначными числами Kilobytes (например, драйверами устройств на ПК или любой программой в большинстве встроенных систем). – Dipstick
Главное преимущество кучи заключается в том, что вы можете динамически выделять на нее. Если вы не знаете размер переменной, который вам нужен: куча его.
Если ваша программа проста, вам может не понадобиться выделять переменную в кучу; но выбор не зависит от сложности программы, это зависит от необходимости вашей переменной. Если вам нужно получить доступ/изменить переменную по всему вашему документообороту, используя несколько функций, то это лучше в куче. Вы освободите его, когда вам это больше не понадобится. Если переменная является только структурой опций или счетчиком, стек идеально подходит для нее.
- 1. Распределение стека цикла C++
- 2. распределение стека внутри цикла
- 3. Распределение стека и кучи экземпляров объектов C++
- 4. Распределение стека для зеленых потоков C++
- 5. C - Распределение стека с использованием только ntdll
- 6. C++ - это распределение стека или кучи?
- 7. PIMPL и распределение стека
- 8. Распределение стека и кучи
- 9. Распределение памяти стека в микроконтроллере
- 10. Распределение памяти стека в рекурсии
- 11. Распределение стека, почему дополнительное пространство?
- 12. Распределение стека С ++ для вектора
- 13. Распределение памяти на основе стека
- 14. Распределение стека, отступы и выравнивание
- 15. Valgrind говорит «распределение стека», я говорю «распределение кучи»
- 16. Распределение на основе стека не рекомендуется?
- 17. динамическое распределение: буфер против стека памяти
- 18. C++ распределение
- 19. распределение памяти в C/C++
- 20. Распределение памяти в C++
- 21. Распределение памяти в C
- 22. Распределение памяти в C
- 23. распределение хранилища в C++
- 24. Динамическое распределение в C
- 25. Распределение сортировки в C#
- 26. Распределение памяти в C++
- 27. Распределение памяти в C++
- 28. Распределение стека в функции wrapper/alloca в функции
- 29. C выделение стека # рекурсии
- 30. C++ станд :: вектор памяти/распределение
Это зависит от того, что означает «все». – AraK
Если вы собираетесь делать все с местными жителями и параметрами, почему вы используете C в первую очередь? Вместо этого используйте функциональный язык, такой как ML, Haskell, Erlang и т. Д. –
В отличие от того, о чем вы думаете? Глобальные переменные или данные о куче? –