У меня есть переменная функция LogDebug
для записи журнала. Регистрация происходит в двух режимах.
Мое приложение перенаправляет переменные аргументы в другую переменную функцию LogDebugEx
в большинстве случаев, следовательно, этот путь необходимо оптимизировать.
Точнее, для некоторых моих запросов на графе callgrind требуется * 383% для vsnprintf
Обратите внимание, что эта функция вызывается много раз для одного запроса.
void LogDebug(const char* zFormat, ...)
{
char zDesc[5000];
va_list ap;
va_start(ap, zFormat);
vsnprintf(zDesc, 5000, zFormat, ap); // Need to optimize in remode mode.
va_end(ap);
if (m_logMode == LOG_MODE_LOCAL) // Does not need to optimize this mode.
{
// This mode is not interested.
}
else // m_logMode == LOG_MODE_REMOTE, critical path
{
LogDebugEx("%s", zDesc); // Forwarded to new variadic function
}
}
Вопрос : Мне нужно избегать копирования всего списка аргументов в массив zDesc
перед пересылкой в функцию LogDebugEx
.
Есть ли способ, с помощью которого я могу усовершенствовать переменные аргументов, поступающие на LogDebug
в LogDebugEx
функцию?
Любой другой причудливый способ сделать это также подойдет, не меняя вызовы функций на LogDebug
.
У меня C++11
поддерживается компилятор GCC 4.9.3
.