Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Performance

Boost , Chapter 1. Boost.Convert 2.0 , Chapter 1. Boost.Convert 2.0

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

полностью зависит от производительности используемого преобразователя. Несколько преобразователей были протестированы на конверсию строк в основные типы и в определенный пользователем тип.

В свою очередь, относительная и абсолютная производительность каждого конкретного преобразователя зависит от платформы, используемого компилятора и конкретной реализации базового компонента преобразования (<std::stream>,<printf>,Boost.Spirit).и т.д. Следовательно, приведенные ниже результаты являются лишь приблизительным указаниемотносительнойпроизводительности упомянутых преобразователей на тестируемых платформах.

Составленный с помощью gcc-4.8.2 на 32-битном Ubuntu 14.04 тесты дали следующие относительные результаты:

str-to-int: spirit/strtol/lcast/scanf/stream=   1.31/   2.15/   3.41/   6.72/   7.24 seconds.
str-to-lng: spirit/strtol/lcast/scanf/stream=   1.24/   2.39/   4.18/   6.63/   7.20 seconds.
str-to-dbl: spirit/strtol/lcast/scanf/stream=   1.45/   4.07/   5.19/  11.13/  14.47 seconds.
int-to-str: spirit/strtol/lcast/prntf/stream=   7.49/   6.48/   8.01/  11.76/   9.31 seconds.
lng-to-str: spirit/strtol/lcast/prntf/stream=   7.34/   6.89/   8.43/  11.55/   9.32 seconds.
dbl-to-str: spirit/strtol/lcast/prntf/stream=  14.13/  13.56/  50.03/  46.25/  44.72 seconds.

Составленный с помощью gcc-4.6.3 на 64-битном Ubuntu 12.04 тесты дали следующие относительные результаты:

str-to-int: spirit/strtol/lcast/scanf/stream=   0.29/   0.47/   1.14/   2.75/   3.15 seconds.
str-to-dbl: spirit/strtol/lcast/scanf/stream=   0.40/   1.44/   1.70/   4.32/   5.59 seconds.
int-to-str: spirit/strtol/lcast/prntf/stream=   1.75/   1.53/   2.06/   3.34/   2.73 seconds.
dbl-to-str: spirit/strtol/lcast/prntf/stream=   5.64/   3.00/  17.89/  14.24/  13.67 seconds.

Основываясь на результатах, учитывая все обстоятельства, я склонен заключить, что явного победителя нет:

  • Spirit.Qi- на основе преобразователя был самым быстрым для струнных к основным<int>,<double>конверсиям. Таким образом, он может быть хорошим кандидатом для задач, преимущественно выполняющих такого рода преобразования (с учетомДуха.Qiограничений, связанных с преобразованием);Дух. Кармана струнувыступление не показалось столь впечатляющим;
  • <std::iostream>- на основе преобразователя был сравнительно медленным. Тем не менее, учитывая его зрелость, доступность и поддержку форматирования, возможно, стоит рассмотреть, не является ли производительность конверсии вашей основной задачей.
  • <strtol>-вдохновленный конвертер был достаточно быстрым и с поддержкой форматирования мог быть привлекательным универсальным. Следует отметить, что он нигде не является столь зрелым, как<boost::cnv::lexical_cast>и<boost::cnv::stream>. Таким образом, багов следует ожидать.

Для определенных пользователем типов<cnv::lexical_cast>,<cnv::cstream>и<cnv::strtol>были протестированы со следующими относительными результатами:

str-to-user-type: lcast/stream/strtol=1.14/0.59/0.23 seconds.
user-type-to-str: lcast/stream/strtol=1.97/0.39/0.24 seconds.

Для обеспеченияконверсий типа строка-пользовательитипа пользователя-струнапервые два развертывают одну и ту же стандартную<std::iostream>библиотеку. Однако<boost::cnv::cstream>значительно превосходит<boost::lexical_cast>в этих испытаниях. Результаты, вероятно, отражают различные базовые конструкции. Стандартный шаблон развертыванияBoost.Convertзаключается в создании преобразователя или преобразователей один раз, а затем повторном их использовании.<boost::lexical_cast>, с другой стороны, благодаря своей конструкции, создает и затем уничтожает<std::stream>экземпляр каждый раз, когда функция называется и<boost::lexical_cast>производительностьтаблица указывает, что «std::stringstreamсо строительством» эксплуатация значительно дороже по сравнению с «std::stringstreamбез строительства».

<boost::cnv::strtol>Поддержка типов пользователей была реализована аналогично, но без накладных расходов<std::stream>. Это привело к лучшим результатам из трех.

Основываясь на данных о производительности, я склонен заключить, что, учитывая безопасность типов и преимущества, предоставляемые.Boost.Convertфреймворк, он (с соответствующими преобразователями), вероятно, должен быть первым выбором для задач, связанных с конверсией.


PrevUpHomeNext

Статья Performance раздела Chapter 1. Boost.Convert 2.0 Chapter 1. Boost.Convert 2.0 может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Chapter 1. Boost.Convert 2.0 ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-20 02:19:20/0.026169061660767/1