Предполагая, что вы принимаете во внимание проблему, о которой говорил Крис Джестер-Янг, учтя проблему " Schlemiel the Painter ", вы, скорее всего, обнаружите, что в сравнении между собой strncat()
быстрее, чем snprintf()
- в том смысле, в каком вы его используете.
snprintf()
имеет (хотя и незначительные, в данном случае) накладные расходы на необходимость разбора строки формата, чего нет у strncat()
.
Предоставленный вами фрагмент кода достаточно отличается от примера, приведенного в связанном вопросе , чтобы потенциально изменить сравнение.
Как уже упоминал Стивен, для большинства платформ, работающих strncpy()
12 раз по сравнению с snprintf()
, разница должна быть незначительной. Здесь было бы полезно использовать профилировщик, чтобы убедиться, что вы сосредоточены на правильной области.
В приведенном вами примере вы пытаетесь добавить строку const в ваш буфер. Если это то, что вы делаете в своем реальном коде (а не просто в качестве простого примера) и копирование строки действительно значительная область времени выполнения, вы можете оптимизировать эту область.
Одним из распространенных методов оптимизации является поиск вычислений, которые можно предварительно вычислить во время компиляции, а не во время выполнения. Если вас интересует только обработка константных строк, вы можете эффективно рассчитать длину строк и затем использовать memcpy()
вместо strncpy()
для выполнения добавления строки. memcpy()
обычно очень хорошо оптимизирован для вашей платформы.
Конечно, такое решение было бы за счет необходимости уделять больше внимания переполнению буфера и арифметике указателей.