Информация об изменениях

Сообщение быстрый sprintf от 01.11.2022 0:13

Изменено 01.11.2022 0:14 maks1180

быстрый sprintf
Нужно реализовать быстрый sprintf, соотвественно:
1) передача размера буффера отпадает, так как придеться постоянно проверять не вышли ли мы за границы буфера, что существенно снизит скорость.
2) выделить буффер максимального размера (что-бы точно влезло), тоже не всегда получится.

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

Второй вариант:
1) выделяем память в стеке по мере парсинга строки.
Насколько я понимаю несколько вызовов alloca дадут единый кусок память общим объёмом не меньше чем сумма вызовов alloca. Это так ?

Проблему возврата памяти выделенной в стеке я описал в другом топике.

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

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

Второй вариант:
1) выделяем память в стеке по мере парсинга шаблона.
Насколько я понимаю несколько вызовов alloca дадут единый кусок память общим объёмом не меньше чем сумма вызовов alloca. Это так ?

Проблему возврата памяти выделенной в стеке я описал в другом топике.

Как вам такие варианты ? Может я велосипед изобретаю и уже есть реализации данной задачи ?