Нужно реализовать быстрый sprintf, соотвественно:
1) передача размера буффера отпадает, так как придеться постоянно проверять не вышли ли мы за границы буфера, что существенно снизит скорость.
2) выделить буффер максимального размера (что-бы точно влезло), тоже не всегда получится.
Придумал следующие варианты sprintf:
Первый вариант:
1) парсит шаблон, переводит числа в строки (в память выделенную в стеке), считает длину строк, запоминает какие куски шаблона нужно исключить
2) тут мы знаем сколько нужно памяти, выделяем её либо в стеке либо получаем через callback функцию
3) собираем конечную строку используя заготовки из п1
Второй вариант:
1) выделяем память в стеке по мере парсинга шаблона.
Насколько я понимаю несколько вызовов alloca дадут единый кусок памяти общим объёмом не меньше чем сумма вызовов alloca. Это так ?
Проблему возврата памяти выделенной в стеке я описал в другом топике.
Как вам такие варианты ? Может я велосипед изобретаю и уже есть реализации данной задачи ?