решил сделать небольшой тест. померял скорость работы boost::lexical_cast, strtod и своего велосипеда.
велосипед мне пришлось написать т.к. strtod внутри вызывает strlen и производительность сильно падает на длинных строках.
результаты, сек
bicycle: 0.135
crt:: 0.682 (в 5 раз медленнее)
boost: 6.289 (в 46.5 раз медленнее велосипеда и в 10 раз медленнее crt)
тест:
#pragma comment(lib, "Winmm.lib")
int main(int argc, char* argv[])
{
DWORD t;
double d, tmp;
const char *str = "3.1415", *end = str + strlen(str);
for (int k = 0; k < 3; k++)
{
// boost
d = 0; t = timeGetTime();
for (int i = 0; i < 1000000; i++)
{
d += lexical_cast<double>(str);
}
t = timeGetTime() - t;
printf("boost: %g: %g\n", d, t*1e-3);
// crt
d = 0; t = timeGetTime();
for (int i = 0; i < 1000000; i++)
{
char *p;
d += strtod(str, &p);
}
t = timeGetTime() - t;
printf("crt: %g: %g\n", d, t*1e-3);
// bicycle
d = 0; t = timeGetTime();
for (int i = 0; i < 1000000; i++)
{
const char *cp;
num_parse(&tmp, &cp, str, end);
d += tmp;
}
t = timeGetTime() - t;
printf("bicycle: %g: %g\n", d, t*1e-3);
}
return 0;
}
19.06.08 15:05: Перенесено модератором из 'C/C++' — получился флейм — Кодт