Цитата(ReAl @ Apr 17 2010, 14:14)

На стеке выделялся только буфер для преобразований целых чисел, а для плавающих форматов буфер длиннее и его по malloc выделяли.
Вначале писали извращенцы, асболютно не представляющие что такое МК. Потом за дело взялись нормальные люди и сделали правильно.
Я все никак не могу взять в толк почему некоторые делают маленький стек, и большой heap, а потом в коде начинают появляться воистину дебильные и тормозные конструции типа:
Код
foo()
{
U8 *buf = (U8 *)malloc(256);
/*
malloc при поиске подходящего блока проходит километровую цепочку heap descriptor'ов.
процесс прохода дескрипторов необходимо защитить локом либо другим sync примитивом,
для обеспечения атомарности доступа,
а значит прерывания могут быть запрещены на ОЧЕНЬ ДОЛГО.
*/
...
free( buf );
/*
проходит через процесс объединения текущего блока со свободными,
хоть этот процесс и быстрее чем выделение,
но всяко медленнее чем одна команда "SUB SP, 256"
в этом процессе требуется обеспечить атомарность при обращении к heap дескрипторам,
а значит прерывания и здесь могут быть запрещены на относительно длительное время
*/
}
что мешает млин heap уменьшить на 256 байт, а стек на те же 256 байт увеличить? Чтобы было просто
Код
foo()
{
buf[ 256 ]; // память выделена мгновенно
// и освобождена автоматически
}