У меня есть приложение, которое строго использует 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();
}
Задача ещё не решена.