0

我有一个严格使用 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();
}
4

0 回答 0