getline + substr =慢跑第一次?

时间:2014-04-14 06:31:37

标签: c++ performance gcc

我在Windows上使用CodeBlocks和TDM-GCC编译器。

问题在于,当我合并getlinesubstr时,第一次运行很慢(需要15-16秒)。

这是一个缓慢的案例:

#include <fstream>
#include <string>

using namespace std;

int main()
{
  string test;
  ifstream file("test.txt");
  getline(file,test);
  test.substr(2);
  file.close();
  return 0;
}

另一方面,这些程序(仅发布main())运行速度很快(第一次运行时约1秒):

{
  string test = "testing";
  ifstream file("test.txt");
  test.substr(2);
  file.close();
  return 0;
}

{
  string test;
  ifstream file("test.txt");
  getline(file,test);
  file.close();
  return 0;
}

{
  string test = "testing";
  ifstream file("test.txt");
  getline(file,test);
  test.substr(2);
  file.close();
  return 0;
}

所以getlinesubstr本身并不慢,如果我在getline之前初始化字符串(也适用于std::string test; test = "testing";

我还要指出,我不是在讨论编译时,而是讨论可执行文件的首次运行。如果我将可执行文件复制到另一个位置,那么慢速首次运行条件也是如此 - 它在每个新位置第一次变慢。其他运行(快速版本)的运行时间不到0.05秒。

你能解释一下这种行为吗?你能否提出另一种解决方案(可能包括一些包含或编译器设置)来避免这个问题?

0 个答案:

没有答案