Даже если указывать __heap_start и __heap_end, но не вызывать malloc, память реально не будет использоваться.
Если не указать, но вызвать malloc — линкер выругается на их отсутствие.
Да, в третьей нормально. До пятой компилятор ещё ничего от себя не вызывает, так что даже если стек во внешней памяти вдруг, всё равно не страшно.
Смотрите еще в теме про
mega1280 и внешнюю память