Можно ли написать приложение на C без использования кучи? - PullRequest
10 голосов
/ 22 июня 2009

Я испытываю столкновение стека / кучи во встроенной среде (см. этот вопрос для получения дополнительной информации)

Я хотел бы попробовать переписать код, чтобы он не выделял память в куче.

Могу ли я написать приложение без использования кучи в C? Например, как бы я использовал стек, только если мне нужно динамическое выделение памяти?

Ответы [ 11 ]

0 голосов
/ 22 июня 2009

Мое главное беспокойство, действительно ли отмена кучи помогает?

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

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

Мои советы по решению этого дела:

  1. Рассчитайте общее потенциальное использование памяти вашей программой. Если он слишком близок, но еще не превышает объем памяти, который вы подготовили для оборудования, тогда вы можете
  2. Попробуйте использовать меньше памяти (улучшите алгоритмы) или используйте память более эффективно (например, поменьше и больше по размеру malloc() для уменьшения фрагментации кучи); или
  3. Просто купите больше памяти для оборудования

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

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