Jump to content
    

Кучу - нет. По стеку можно посмотреть его исходники, порядка 20-30 байт
Полный вариант — немного больше сорока, добавляется буфер под максимально возможную длину для преобразования float. В очень старых версиях (~10-летней давности) полный вариант при наличии float-форматов выделял этот буфер через malloc. Это притянулось от какого-то распространённого варината форматтера, но быстро было исправлено.

 

Share this post


Link to post
Share on other sites

добавляется буфер под максимально возможную длину для преобразования float.
Что-то я не нашел его в исходниках. 11-байтовый плюс еще несколько локальных переменных видел, но они используются во всех вариантах. преобразование float скидывает 6 регистров на стек, плюс сами параметры printf на стек кладутся.

 

Share this post


Link to post
Share on other sites

Точно. Давненько я туда не заглядывал. Работает, да и ладно :-)

Когда-то давно-давно, до avr-libc 1.6, как я сейчас выяснил, было

#define FLTBUFLEN 40
...
#if PRINTF_LEVEL >= PRINTF_FLT
    int8_t    decpt;
    char    fb[FLTBUFLEN];    /* floating point buffer */
#endif

остатки от форматтера, который и double умел.

Сейчас они 1) жёстко урезали до float с максимум 7 значащими цифрами и написанная на ассемблере __ftoa_engine в тот 11-байтовый буфер складывает флаги результата преобразования (в т.ч. NAN) и преобраованную мантиссу, а порядок возвращает в vfprintf как число, которое там уже выводится отдельно. Итого к стеку в самом vfprintf добавляется адрес возврата при вызове __ftoa_engine и шесть байтов для сохраняемых в ней регистров. Очень хорошо (то-то я как пример 4-debug написал, так удивился, что отладочній процесс с printf-ом ест меньше стека, чем яожидал :-) ).

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...