c++只用基本库,怎么加快文件的处理

由于要跨平台使用,因此希望只用c++的基本库,不调用vc的库。问题是这样的:每次读取一个整形(int),然后各种位操作取出有用信息,函数是file.read((char*)(&tmp),sizeof(int))。但是处理时发现速度非常慢。一百多兆的文件要几十分钟,请问怎么加快这个速度。我的想法是把文件全部调入内存,因为文件最大也就几百兆,可以承受。或者把文件全部放入一个容器或数组,请问这两种思路靠谱吗,还有内存映射的方法,c++只能基本库能实现吗

全部调入内存 就是空间换时间,关键要空间够,而且文件大小一般不要超过4G,你的条件可以满足

内存映射,如果是简单的,你可以自己做, 方法和全读入类似,只是需要一张映射表而已(实际上是保留文件中的一段数据在内存里而已,原理和虚拟内存类似),
如果要功能强的,那么肯定要API了,跨平台的话可以使用boost::interprocess
这个已经封装到数据结构的映射级的了
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-02
做个简单的文件读取缓冲区.
基本库也没有问题啊.你直接开数组都可用.
你的速度全部浪费在了每次的文件都写上了.
可用开了4-5M的数组,然后把文件读取一部分到内存中进行处理.
处理完后再继续读取并处理,直到结束.
int * tmp = new int[4*1024*1043];
//检测你文件大小,并把数据尽量读取到缓冲区中
//处理缓冲区中的数据.
//继续读取新数据到缓冲区中并继续处理
//完成处理
delete [] tmp;
tmp=NULL;

c++只用基本库,怎么加快文件的处理
全部调入内存 就是空间换时间,关键要空间够,而且文件大小一般不要超过4G,你的条件可以满足 内存映射,如果是简单的,你可以自己做, 方法和全读入类似,只是需要一张映射表而已(实际上是保留文件中的一段数据在内存里而已,原理和虚拟内存类似),如果要功能强的,那么肯定要API了,跨平台的话可以使...

C++ 应用程序中的文档开发方案,看这篇就够了
Aspose.Words for C++作为独立文字处理库,无需依赖MS Office或其他依赖项。支持文档创建与编辑,提供强大的邮件合并引擎,轻松生成模板驱动文档。只需少量代码即可在C++应用程序中无缝生成高质量Word文档。Aspose.Words for C++的显著功能包括:开始使用C++ Word文档处理API的资源C++中的Excel电子表格处理MS E...

c++使用静态库和直接使用源码有什么区别
从源代码编译(第一步)也是生成一大堆.o,从静态库里解包也是生成一大堆相同的.o,其余的步骤完全是没有区别的。换句话说,比如你有一个libexample.a,它里面有src1.o和src2.o两个目标文件。你在链接的时候用ld -lexample开关链接一个静态库,和你先用ar -x libexample.a解包,然后用ld src1...

[C++标准程序库的问题] 在删除操作很多的情况下,应该选择什么样的容器...
按照标准程序库的说明,当删除\/插入只发生在容器的尾部时,应该使用vector;当删除\/插入只发生在容器的首\/尾部时,应该使用deque;当删除\/插入操作很多,而且删除\/插入不是只在容器的首尾,这时应该选择list。但是这里也有一个问题,在使用list时,由于其迭代器只能一次移动一个位置,在有大量删除的操作时...

C++:如何通过编码技巧加快大项目重新编译的速度
一般该定义式是由#include包含的头文件所提供的,所以一般People上面有这些预处理命令 1 #include <string> 2 #include "date.h" 3 #inblude "image.h" 4 class Peopel{ 5 public: 6 People(const std::string & name,const Date& brithday,Image Img) 7 std::string name( ) const; ...

C++中库文件和头文件有什么区别呀?
库文件:是C++已经封装好的一些基本算法功能。你只需引入相应库文件的头文件,调用库文件的函数接口就可以实现相应的功能。这就像你引入iostream.h这个头文件,就可以调用其标准库std下的cout函数进行输出一样。头文件:你调用库文件里的函数就的调入相应的头文件(虽然标准C++里取消了.h,多了using name...

c\\c++:文件和库文件有什么区别
源文件指的是包含程序代码的文本文件,库文件是编译后产生的二进制目标文件的打包

c\\c++:文件和库文件有什么区别
2.文件头标志不同,例如图片文件.png格式的文件开头的16进制标志是:8950 4e47 0d0a 1a0a ,其他文件也有自己的文件头标识。他们不同的编码方式需要采用不同的算法来解压数据。另外,如果你只是在问C\/C++编译时的文件和库文件的区别,请看下面:普通的文件例如stdio.h只是最普通的文本文件(只要普通的...

C++库和C库的区别
处理函数;<string>是包装了std的C++头文件,对应的是新的string类;<cstring>是对应于旧C头文件 的std版本。如果能掌握这些,其余的也就容易了。关于标准库,需要知道的第二点是,库中的一切几乎都是模板。iostream帮助你操作字符流,但什么是字符?是char吗?是wchar_t?是 Unicode字符?一些其它的多字节字符?没有明显...

学c++大半年了基本语法大都学会了,就是关于算法方面头痛啊
首先来讲,你要把课本上的东西学透,你显然没学好 其次的话要有计算思维,不要什么都不想直接敲代码,首先要想明白这个题怎么做 假如不是写程序这个题应该怎么做,想清楚再转换成代码,最后,编程要多加练习,实战才能出经验,多做题,看看你们老师有题库啥的没有 我当年学c++的时候把我们学校的题...

相似回答
大家正在搜