Эти измерения производительности сосредоточены вокруг форматирования по умолчанию одногоintцелого числа с использованием различных библиотек и методов. Общие сроки выполнения для этих примеров сравниваются ниже. Мы сравниваемспринтф, C++ iostreams,ФорматиДух. Карма.
Полный исходный код теста производительности см. здесь:int_generator.cpp. Все измерения были выполнены путем выполнения1e7итераций для каждого типа форматирования (НУМИТЕРАЦИИ установлены на1e7в коде, показанном ниже).
Код, используемый для измерения производительностиltoa:
char buffer[65];
for (int i = 0; i < MAX_ITERATION; ++i)
{
ltoa(v[i], buffer, 10);
}
Код, используемый для измерения производительности стандартных C++ iostreams:
std::stringstream str;
for (int i = 0; i < MAX_ITERATION; ++i)
{
str.str("");
str << v[i];
}
Код, используемый для измерения производительностиBoost.Format:
std::string str;
boost::format int_format("%d");
for (int i = 0; i < MAX_ITERATION; ++i)
{
str = boost::str(int_format % v[i]);
}
Код, используемый для измерения производительностиДух. Кармас использованием простого буфера символов:
char buffer[65];
for (int i = 0; i < MAX_ITERATION; ++i)
{
char *ptr = buffer;
karma::generate(ptr, int_, v[i]);
*ptr = '\0';
}
В следующей таблице показаны общие результаты работы, собранные при использовании различных компиляторов. Все время в секундах измеряется для1e7итераций (платформа: Windows7, процессор Intel Core Duo(tm), 2,8 ГГц, 4 Гбайт оперативной памяти). Для более читабельного сравнения результатов см. этотрисунок.
Table 5. Performance comparison for a single int (all times in [s], `1e7`
iterations)
|
Библиотека
|
gcc 4.4.0 (32 бит)
|
VC++ 10 (32 бит)
|
Intel 11.1 (32 бит)
|
gcc 4.4.0 (64 бит)
|
VC++ 10 (64 бит)
|
Intel 11.1 (64 бит)
|
|---|
ltoa | 1.542 | 0.895 | 0.884 | 1.163 | 1.099 | 0.906 |
iostreams | 6.548 | 13.727 | 11.898 | 3.464 | 8.316 | 8.115 |
Формат | 16.998 | 21.813 | 20.477 | 17.464 | 14.662 | 13.646 |
Дух.Кармаint_ | 1.421 | 0,744 | 0,697 | 1.072 | 0,953 | 0.606 |