Один и тот же код огромная разница в производительности в разных компиляторах gcc - PullRequest
3 голосов
/ 05 июня 2019

Пытается понять причину разницы в производительности. Я читаю файл ~ 70M с функцией ниже. Выполнение кода с помощью: gcc 4.4.6 занимает меньше секунды gcc 3.2.3 занимает больше 6 минут

Большую часть времени проводят в заданной части. Что было изменено, чтобы сделать разницу в скорости между двумя компиляторами?

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 Ответ

3 голосов
/ 05 июня 2019

Не могли бы вы попытаться немного подправить этот код (одна дополнительная строка):

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);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...