同一代码在不同的gcc编译器中的巨大性能差异

时间:2019-06-05 12:29:40

标签: c++ performance

试图了解造成性能差异的原因。 我正在读取具有以下功能的〜70M文件。 使用以下代码运行代码: gcc 4.4.6不到一秒钟 gcc 3.2.3需要超过6分钟的时间

大部分时间都花在分配部分上。 为了使2个编译器之间的速度不同而进行了哪些更改?

bool ReadFile(const string& path, string& file_data)
{
    ifstream ifs(path.c_str(), ifstream::in | ifstream::ate);
    if (!ifs) return false;
    int size = ifs.tellg();
    if (size==0) return false;
    ifs.seekg(0, ios::beg);
    file_data.assign((istreambuf_iterator<char>(ifs)),
       istreambuf_iterator<char>());

    return true;
}

1 个答案:

答案 0 :(得分:3)

您能否尝试调整一下此代码(多一行):

bool ReadFile(const string& path, string& file_data)
{
    ifstream ifs(path.c_str(), ifstream::in | ifstream::ate);
    if (!ifs) return false;
    int size = ifs.tellg();
    if (size==0) return false;
    ifs.seekg(0, ios::beg);

    file_data.reserve(size);
    file_data.assign((istreambuf_iterator<char>(ifs)),
       istreambuf_iterator<char>());

    return true;
}

然后再次进行测量
在第二次尝试中,您可以尝试以下操作:

bool ReadFile(const string& path, string& file_data)
{
    ifstream ifs(path.c_str(), ifstream::in | ifstream::ate);
    if (!ifs) return false;
    int size = ifs.tellg();
    if (size==0) return false;
    ifs.seekg(0, ios::beg);

    file_data.resize(size);
    return ifs.read(&file_data[0], size);
}