1

我打算编写一个程序,它必须以读写方式多次访问某个文件。所以我决定使用 fstream,因为我可以将这个类用于阅读和写作目的。

我的想法是在应用程序启动时打开文件,然后在应用程序关闭时关闭它。

由于文件可以任意大,我打算使用“分页”结构,其中:

1)为每页预分配固定数量的内存和固定数量的页

2)将部分文件加载到第一个空闲页面

3)如果没有空闲页面,我选择一个具有一定标准的非空页面,我提交所有编辑(如果有的话),然后加载页面中的文件部分。

这并不难编码。但我想知道如果我要重新发明轮子......也许 fstream 本身是以一种聪明的方式编写的,因此它也实现了类似的分页机制。那样的话,我就不管了,随便写写读就行了。

有什么建议吗?

4

2 回答 2

1

标准 C++ 库的内部工作因实现而异。因此,需要进行测试才能在您的首选平台上获取一些真实数据。通常,内存映射文件被认为是访问存储在文件中的数据的最快方式(正如 Uflex 在他的评论中提到的那样,但它也有一些缺点(参见链接的 wiki 页面)。您可以使用标准(POSIX ) C 函数mmap()munmap(), 或Boost C++ 库,它们也具有用于内存映射文件的可移植 C++ 接口。

于 2012-12-11T12:20:07.890 回答
1

不要自己做这件事。除非您使用非常奇特的实现,否则 fstream 类已经有效地实现了这种机制。

结帐http://www.cplusplus.com/doc/tutorial/files/ “缓冲区和同步”

如果您seek使用旧内核或标准库的实现进入大于 2GB 的文件,则可能会出现问题。在 C++ 中检查此 大文件支持 或使用Boost.Filesystem

于 2012-12-11T13:44:18.273 回答