试图了解造成性能差异的原因。 我正在读取具有以下功能的〜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;
}
答案 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);
}