执行时Boost :: xpressive :: cregex比boost :: regex慢

时间:2013-01-09 10:16:28

标签: c++ regex boost callgrind xpressive

我正在开展一个表现至关重要的项目 在这个项目中,我还需要使用正则表达式来匹配char数组中的模式。因此,我开始使用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个电话。

这是一个非常大的区别(正则表达式比xpressive快3倍...输入完全相同),我期待这样的差异,但不是这方面... xpressive不应该比正则表达式快吗? 也许我正在使用xpressive的动态版本,在这种情况下,我如何强制xpressive是静态的?

感谢。

编辑:使用GCC4.3.2编译进行调试

0 个答案:

没有答案