经测试,运行时间缩短到了0.25秒,效率继续提高了14%。到此为止我已经没有更好的方法继续提高读文件的速度了。回头测一下Pascal的速度如何?结果令人大跌眼镜,居然运行了2.16秒之多。程序如下:
  const
  MAXN = 10000000;
  var
  numbers :array[0..MAXN] of longint;
  i :longint;
  begin
  assign(input,'data.txt');
  reset(input);
  for i:=0 to MAXN do
  read(numbers[i]);
  end.
  为确保准确性,我又换到Windows平台上测试了一下。结果如下表:
  方法/平台/时间(秒) Linux gcc Windows mingw Windows VC2008 scanf 2.010 3.704 3.425 cin 6.380 64.003 19.208 cin取消同步 2.050 6.004 19.616 fread 0.290 0.241 0.304 read 0.290 0.398 不支持 mmap 0.250 不支持 不支持 Pascal read 2.160 4.668
  从上面可以看出几个问题
  Linux平台上运行程序普遍比Windows上快。Windows下VC编译的程序一般运行比MINGW(MINimal Gcc for Windows)快。VC对cin取消同步与否不敏感,前后效率相同。反过来MINGW则非常敏感,前后效率相差8倍。read本是linux系统函数,MINGW可能采用了某种模拟方式,read比fread更慢。Pascal程序运行速度实在令人不敢恭维。