# CPP读取文件速度比较

探寻C++最快的读取文件的方案

竞赛中读数据的情况最多的莫过于读一大堆整数了，于是我写了一个程序，生成一千万个随机数到data.txt中，一共55MB。然后我写了个程序主干计算运行时间，代码如下：

View Code CPP
#include <ctime>
int main()
{
int start = clock();
//DO SOMETHING
printf("%.3lf\n",double(clock()-start)/CLOCKS_PER_SEC);
}

View Code CPP
const int MAXN = 10000000;

int numbers[MAXN];

{
freopen("data.txt","r",stdin);
for (int i=0;i<MAXN;i++)
scanf("%d",&numbers[i]);
}

View Code CPP
const int MAXN = 10000000;

int numbers[MAXN];

{
freopen("data.txt","r",stdin);
for (int i=0;i<MAXN;i++)
std::cin >> numbers[i];
}

View Code CPP
const int MAXN = 10000000;

int numbers[MAXN];

{
freopen("data.txt","r",stdin);
std::ios::sync_with_stdio(false);
for (int i=0;i<MAXN;i++)
std::cin >> numbers[i];
}

View Code CPP
const int MAXS = 60*1024*1024;
char buf[MAXS];

void analyse(char *buf,int len = MAXS)
{
int i;
numbers[i=0]=0;
for (char *p=buf;*p && p-buf<len;p++)
if (*p == ' ')
numbers[++i]=0;
else
numbers[i] = numbers[i] * 10 + *p - '0';
}

View Code CPP
const int MAXN = 10000000;
const int MAXS = 60*1024*1024;

int numbers[MAXN];
char buf[MAXS];

{
freopen("data.txt","rb",stdin);
buf[len] = '\0';
analyse(buf,len);
}

View Code CPP
const int MAXN = 10000000;
const int MAXS = 60*1024*1024;

int numbers[MAXN];
char buf[MAXS];

{
int fd = open("data.txt",O_RDONLY);
buf[len] = '\0';
analyse(buf,len);
}

View Code CPP
const int MAXN = 10000000;
const int MAXS = 60*1024*1024;

int numbers[MAXN];
char buf[MAXS];
void mmap_analyse()
{
int fd = open("data.txt",O_RDONLY);
int len = lseek(fd,0,SEEK_END);
char *mbuf = (char *) mmap(NULL,len,PROT_READ,MAP_PRIVATE,fd,0);
analyse(mbuf,len);
}

View Code PASCAL
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
end.

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
mmap	  0.250	    不支持	  不支持

Linux平台上运行程序普遍比Windows上快。
Windows下VC编译的程序一般运行比MINGW（MINimal Gcc for Windows）快。
VC对cin取消同步与否不敏感，前后效率相同。反过来MINGW则非常敏感，前后效率相差8倍。
Pascal程序运行速度实在令人不敢恭维。

BYVoid原创 转载请注明



• 本文已收录于以下专栏：

## C++文件读写详解（ofstream,ifstream,fstream）

• kingstar158
• 2011年10月10日 16:33
• 491032

## 探索C++最快的读取文件的方案

• yaxf999
• 2012年04月24日 16:37
• 6230

## C/C++文件操作效率比较——FILE/fstream

• shudaxia123
• 2016年01月11日 18:13
• 2034

## CPP读取文件速度比较

• Hk_john
• 2017年05月06日 19:36
• 201

fopen()函数： 1.作用: 在C语言中fopen()函数用于打开指定路径的文件，获取指向该文件的指针。 2.函数原型： FILE * fopen(const char * path,const ...
• yang2011079080010
• 2016年09月13日 18:21
• 35584

## c++ 利用内存映射读取大文件

• KUAILE123
• 2013年09月05日 17:16
• 3906

## C语言的FILE*读取文件比CFile要快的原因分析

// CFile file; // if(!file.Open(BinName, CFile::modeCreate | CFile::modeWrite | CFile::typeBinary)...
• qq_23992597
• 2016年06月29日 10:57
• 803

## c cpp字符串比较

http://www.cnblogs.com/MuyouSome/archive/2013/06/08/3127828.html 在C中，并没有字符串这个数据类型，而是使用字符数组来...
• Edmund_G
• 2016年12月15日 12:54
• 967

## cpp不区分大小写比较字符串string

int StrCaseCmp(const string & stra , const string & strb) { int aLen = stra.length(); int bLen = s...
• realxie
• 2012年02月21日 18:15
• 5544

## 字符串写入文件 C++ 读文件 将文件内容读入到字符串string中

• tianzhijiaozi19
• 2017年05月12日 22:08
• 1731

举报原因： 您举报文章：CPP读取文件速度比较 色情 政治 抄袭 广告 招聘 骂人 其他 (最多只允许输入30个字)