我正在开发一个小程序,处理相当大的(4-5 MB)矩阵形状(数值存储为N * M行和列)ASCII文件:
1 2 3
4 5 6
7 8 9
etc.
我注意到旧式C文件输入法:
csFile = fopen("file.dat","r");
while(fscanf(csFile, "%lf", &Point)!=EOF) {
}
fclose(csFile);
比最基本的C ++实现快得多(230 ms,相比之下,对于存储大约230k数值的3MB文件,~1500 ms):
ifstream myfile ("file.dat");
while(myfile >> Point) {
}
myfile.close();
为简单起见,我省略了循环内部的数据操作函数,但即使这些“裸”示例也显示C类型I / O的几乎七倍的增强。为什么会出现如此巨大的性能差异?有没有更快的方法来使用C ++流/函数读取这些类型的文件?
答案 0 :(得分:3)
如果您在C和C ++代码之间看到如此巨大的差异,我怀疑您没有使用优化进行编译。尝试使用-O3
或编译器需要的任何标志来启用优化。测量未经优化的代码的速度通常是毫无意义的,因为它告诉您更多关于语言的复杂性而不是代码的复杂性。特别是C ++非常依赖于优化来获得合理的性能。
答案 1 :(得分:-1)