Boost :: xpressive :: cregex медленнее, чем boost :: regex во время выполнения

Я работаю над проектом, где производительность имеет решающее значение.
В этом проекте мне также нужно использовать регулярное выражение для сопоставления с шаблоном в массиве символов. Таким образом, я начал использовать boost :: xpressive :: cregex, поскольку мне просто нужно одно регулярное выражение, которое можно скомпилировать один раз.

Вот мой код с xpressive

const boost::xpressive::cregex CCConcealerImpl::kCCRegEx = boost::xpressive::cregex::compile("... my regex...", boost::xpressive::regex_constants::optimize);

Для декларации (статическая декларация)

char * aTempStr = new char[iSize+1];
//Filling my array
aTempStr[iSize] = '\0';
if (boost::xpressive::regex_match(aTempStr, aTempStr + iSize, kCCRegEx))
{
std::cout << "Matched" << std::endl;
}

Для соответствия моего регулярного выражения.

Затем я запустил callgrind, чтобы убедиться в работоспособности этой реализации, а для метода match callgrind возвращает следующее:
2 521 246 300 инструкций для 127 928 звонков.

Для любопытства я также попробовал реализацию boost :: regex:

const boost::regex CCConcealerImpl::kCCRegEx("... my regex...");

Для декларации (статическая декларация)

char * aTempStr = new char[iSize+1];
//Filling my array
aTempStr[iSize] = '\0';
if (boost::regex_match(aTempStr, aTempStr + iSize, kCCRegEx))
{
std::cout << "Matched" << std::endl;
}

Для соответствия моего регулярного выражения.

Но когда я запускаю callgrind здесь, что я получаю:
694 604 660 инструкций для 127 928 звонков.

Это довольно большая разница (регулярное выражение в 3 раза быстрее, чем xpressive … с точно таким же входом), я ожидал такой разницы, но не с этой стороны …
Разве xpressive не должен быть быстрее, чем регулярное выражение?
Может быть, я использую динамическую версию xpressive, в таком случае, как я могу заставить xpressive быть статическим?

Благодарю.

Редактировать: скомпилировано для отладки с GCC4.3.2

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]