Boost.Convert фреймворк добавляет дополнительный слой опосредования и некоторые Boost.Convert конвертеры представляют собой обертки вокруг фактических средств преобразования, таких как boost::lexical_cast
, boost::spirit
и т.д. Следовательно, могут возникнуть обоснованные опасения в отношении накладных расходов на производительность, введенных рамками, в отличие от непосредственного развертывания средств преобразования.
Чтобы проверить, что код был заимствован и адаптирован от Духа. Qi performance/optimization framework (см. $BOOST_ROOT/libs/spirit/workbench/qi/int_parser.cpp). Испытания были
- скомпилированы с использованием gcc-4.6.3 и gcc-4.8.2;
- с оптимизацией:
g++test/performance_spirit.cpp----boost_1_56_0-lrt
;
- 64-разрядный Ubuntu 12.04 и 32-разрядный Ubuntu 14.04;
- бежать на вход случайно сгенерированных 18 числовых строк (9 положительных и 9 отрицательных чисел с числом цифр от 1 до 9);
- запустите
-
boost::lexical_cast
и boost::lexical_cast
на основе преобразователя;
boost::qi::parse
и boost::qi::parse
-конвертер.
Цель теста состояла в том, чтобы развернуть ту же функциональность непосредственно и как часть структуры Boost.Convert. Результаты показаны ниже для нескольких последовательных прогонов:
gcc-4.6.3 (64-bit)
raw_lxcast_str_to_int_test: 1.0504170070 [s]
cnv_lxcast_str_to_int_test: 1.0610595810 [s] (1% slower than raw above)
raw_spirit_str_to_int_test: 0.2845369110 [s]
cnv_spirit_str_to_int_test: 0.2834834560 [s] (1% faster than raw above)
raw_lxcast_str_to_int_test: 1.0770350390 [s] (2% slower than prev. run)
cnv_lxcast_str_to_int_test: 1.0607665160 [s] (1% faster than raw above)
raw_spirit_str_to_int_test: 0.2792295470 [s] (2% faster than prev. run)
cnv_spirit_str_to_int_test: 0.2827574570 [s] (1% slower than raw above)
gcc-4.8.2 (32-bit)
raw_lxcast_str_to_int_test: 8.5153330600 [s]
cnv_lxcast_str_to_int_test: 8.6989499850 [s] (2% slower than raw above)
raw_spirit_str_to_int_test: 2.4197476510 [s]
cnv_spirit_str_to_int_test: 2.4594171510 [s] (2% slower than raw above)
raw_lxcast_str_to_int_test: 8.4136546980 [s] (1% faster than prev. run)
cnv_lxcast_str_to_int_test: 8.5322524600 [s] (1% slower than raw above)
raw_spirit_str_to_int_test: 2.3842388060 [s] (1% faster than prev. run)
cnv_spirit_str_to_int_test: 2.3812094400 [s] (0% faster than raw above)
Результаты последовательных прогонов варьировались с отклонениями около 2%. Менее 2% было также отклонением кода «cnv» по сравнению с «сырым» кодом. Это указывает на то, что фреймворк Boost.Convert не имел обнаруживаемых накладных расходов с тестируемыми компиляторами, аппаратным обеспечением и сценариями развертывания. Результаты могут отличаться на других платформах.