Boost を正規表現に厳密に使用するアプリケーションがあります。私は g++4.9 にアップグレードし、組み込みの正規表現関数を使用するようにコードの一部 (すべてではありません) を切り替えました (単純な変更)。切り替え後、valgrind の --callgrind 機能を使用してアプリケーションのプロファイルを作成してみました。しかし、それは非常に遅いです。これは私のアプリケーションに関連していますが、1 秒あたり約 30 回の繰り返しから、1 秒あたり 1 回未満になりました。アプリケーション自体ではないことを確認するために、valgrind を実行して/実行せずにテストしました。Boost の実装でもテストしましたが、問題はありませんでした。
valgrind 3.10.0 と 3.10.1 でテストしましたが、どちらも同じ動作を示します。
編集: 私が置き換えた関数の簡易版。Boost と C++ の構文が類似しているため、2 つの関数は名前空間 (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();
}