Мурик писал(а):Стек и куча не могут быть в одной области памяти. Откуда студия знает сколько из свободной памяти нужно выделить под стек, а сколько под кучу?
А зачем ей знать? Куча растет снизу вверх, стек сверху вниз. Если они встретятся, конечно, будет катастрофа, но,чаще всего, в тех задачах, которые решают на АВР-ках, этого не происходит. И ни у кого голова не болит... В отличие от STM32, где дефолтные размеры стека и кучи указаны маленькими и сплошь и рядом народ вдруг с паническим воплем "почему у меня hard fault" лезет в конференции, на что получает стандартный ответ "Стек увеличь".
Мурик писал(а):И это правильно. Потому что если куча не используется, то для нее можно не выделять память.
Правильно, но не поэтому. А, может быть, и совсем неправильно. Отдай стеку с кучей всю память, оставшуюся свободной после статических переменных и программа сама разберется, сколько из этой памяти уйдет под стек, сколько под кучу. Динамически, в процессе исполнения.
Мурик писал(а):Явно заданные размеры стека и кучи, позволят определить что переменные дошли до кучи со стеком.
В скрипте линкера есть такая проверка.
Проверка, конечно, нужная, но не особо информативная. Поскольку большинство народа рулит размерами стека и кучи, что называется, "от фонаря". Мало? Добавим. Сделаем в 2-4-8-16 раз больше, и вперед! Вот, как раз, от чрезмерного увеличения стека с кучей в процессе такого отфонарного подбора эта проверка и защищает. То есть, бодрое преодоление трудностей, специально для этой цели придуманных.
Мне кажется, вся эта ситуация - результат некорректного "обратного масштабирования" с "больших" систем на МК. В большой системе всеми этими делами рулит система управления виртуальной памятью, вопросов с размерами стека и кучи просто не возникает. А в большинстве МК ничего такого нет, да даже если и есть, то не используется, по причине отсутствия "большой" операционки и ненадобности оной. Ну, и решили свалить это дело на программиста...
То есть, конечно, еще могут быть дополнительные типы внешней памяти, вроде SDRAM на "продвинутых" STM32, но это, по-любому, требует специальных действий, такую память нельзя использовать таким же образом, как и встроенную SRAM, хотя бы потому, что она тормознее, и уж под стек она точно не годится.
Добавлено after 25 minutes 29 seconds:
И, кстати, я не понимаю, с чего это народ так боится, что стек вдруг переполнится из-за ошибки в программе? Да, если просто не хватает памяти, надо брать кристалл "пожирнее", а вот так, вроде всего хватает, а допустил какую-то ошибку, и стек переполнился? С чего бы это вдруг? Ладно, в программе на асме можно такое накосячить запросто, но для STM32 на асме, обычно, не программируют. А так, единственное, что приходит в голову - зациклившая рекурсия, но рекурсивная программа на МК - это как-то крутовато...
А иначе, стек имеет вполне конечные размеры, из расчета на максимум вложенности, если оно не лезет, значит, как я уже отметил, просто нужен камешек "пожирнее", или нужно менять алгоритм. В общем, неправильно все это...
Впрочем, все это уже обсуждалось, здесь же, ИМХО, осенью.
Кто мешает тебе выдумать порох непромокаемый? (К. Прутков, мысль № 133)