Цитата(Сергей Борщ @ Apr 25 2007, 01:11)

Поправьте, если я неправ - printf требует море ОЗУ в частности и из-за того, что резервирует на стеке место под буфер на все случаи жизни.
Все известные мне реализации printf() и прочих ...f() есть обертки одного и того же. И в следствие этого не имеют радикальных отличий по использованию стека.
В IAR это выглядит так:
Код
int (printf)(const char *fmt, ...)
{ /* print formatted to stdout */
int ans;
va_list ap;
va_start(ap, fmt);
ans = _Printf(&_Prout, (void *)1, fmt, &ap);
va_end(ap);
return (ans);
}
int (vsnprintf)(char *s, size_t size,
const char *fmt, va_list ap)
{ /* print formatted to string from arg list */
int ans;
_SNProutInfo x;
x.count = 0;
if (size == 0)
{ /* write nothing */
x.s = (char *)&x.size; /* place to junk terminating nul */
x.size = 0;
}
else
{ /* set up buffer */
x.s = s;
x.size = --size;
}
ans = _Printf(&_SNProut, &x, fmt, &ap);
*x.s = '\0';
return ans < 0 ? ans : x.count;
}
Собственно движок ....f() память под буфер кушает только на размер одного максимального равертутого формата знак+число+экспонента 40 с хвостиком байт, что не так трагично.