Мое главное беспокойство, действительно ли отмена кучи помогает?
Поскольку ваше желание не использовать кучи связано со столкновением стека / кучи, при условии, что начало стека и начало кучи заданы правильно (например, в одной и той же настройке, в небольших образцах программ такой проблемы не возникает), значит, столкновение означает оборудованию не хватает памяти для вашей программы.
Не используя кучу, можно действительно сэкономить некоторое пустое пространство от фрагментации кучи; но если ваша программа не использует кучу для нерегулярного распределения большого размера, то потери там, вероятно, невелики. Я буду видеть твою проблему столкновения скорее как проблему нехватки памяти, что-то, что не может быть решено, просто избегая кучи.
Мои советы по решению этого дела:
- Рассчитайте общее потенциальное использование памяти вашей программой. Если он слишком близок, но еще не превышает объем памяти, который вы подготовили для оборудования, тогда вы можете
- Попробуйте использовать меньше памяти (улучшите алгоритмы) или используйте память более эффективно (например, поменьше и больше по размеру
malloc()
для уменьшения фрагментации кучи); или
- Просто купите больше памяти для оборудования
Конечно, вы можете попытаться поместить все в заранее заданное пространство статической памяти, но очень вероятно, что на этот раз это будет перезапись стека в статическую память. Поэтому улучшите алгоритм, чтобы он занимал меньше памяти, а во второй - больше.