我有一个严格使用 Boost 进行正则表达式的应用程序。我升级到 g++4.9 并将部分但不是全部代码切换到使用内置的正则表达式函数(直接更改)。切换后,我尝试使用 valgrind 的 --callgrind 功能来分析应用程序。但它非常慢。尽管它与我的应用程序相关,但它从每秒大约 30 次迭代变为每秒不到 1 次。我已经在有/没有运行 valgrind 的情况下进行了测试,以确保它不是应用程序本身。我还测试了 Boost 实现并且没有问题。
我已经用 valgrind 3.10.0 和 3.10.1 进行了测试,它们都表现出相同的行为。
编辑: 我替换的功能的简化版本。由于 Boost 和 C++ 语法的相似性,这两个函数除了命名空间(Boost:: v. std::) 之外基本相同。
void func() {
ifstream fin;
fin.open("file1");
string check;
stringstream ss (stringstream::in | stringstream::out);
ss << "Some complicated regex";
getline(ss, check);
regex replacementRecord(check);
smatch results;
regex pattern1("thing1");
while(!fin.eof()) {
string line;
getline(fin, line);
// skip blank or newline
if (line == "" || line == "\n") {
continue;
}
// Check for these important patterns first
if (regex_search(line, results, pattern1)) {
// do stuff
continue;
}
// No important patters, look for this replacementRecod
if(regex_search(line, results, replacementRecord)) {
string prefix(results[1].first, results[1].second);
// do stuff
}
else {
// do other stuff
}
}
fin.close();
}