使用C++中的文件映射对象进行读取

Read with File Mapping Objects in C++

本文关键字:对象 读取 映射 文件 C++ 使用      更新时间:2023-10-16

我正在尝试使用内存映射文件(MMF)读取.csv数据文件(非常大且耗时)。

我听说MMF非常快,因为它缓存文件的内容,因此用户可以像访问内存一样访问磁盘中的内容。

我可以知道MMF是否比使用其他阅读方法更快吗?

如果这是真的,有人能给我看一个如何从磁盘读取文件的简单例子吗?

非常感谢。

我可以知道MMF是否比使用其他阅读方法更快吗?

如果在一个过程中按顺序读取整个文件,那么内存映射文件可能与使用传统文件I/O大致相同。

有人能给我看一个如何从磁盘读取文件的简单例子吗?

内存映射文件通常是操作系统的一个功能,所以你必须告诉我们你在哪个平台上才能获得使用它的示例

如果要按顺序读取文件,可以使用C++ifstream类或C运行时函数,如fopen、fread和fclose。

它是否更快取决于许多不同的因素(例如,您正在访问什么数据,如何访问它等)。要确定什么适合您的情况,您需要对不同的解决方案进行基准测试,并查看什么最适合您的情况。

内存映射文件的主要优点是可以将数据直接从文件系统复制到用户可访问的内存中。

在传统的(fstream::read()、fredad()等)类型的文件读取中,文件的内容被读取到操作系统中的临时缓冲区,然后(部分)该缓冲区被复制到用户提供的缓冲区。这是因为操作系统不能依赖内存,而且很快就会变得非常混乱。对于内存映射文件,操作系统直接知道文件不同部分的内存在哪里(因为分配内存并跟踪它在哪里是操作系统的任务!),所以操作系统可以直接复制它。

然而,我强烈怀疑读取文件的方法只是一个次要部分,而文件的实际解释/解析/复制很可能是一个重要部分。[推测,我们当然没有看到您的代码]。当然,如果文件非常大,DISK本身的I/O速度可能会起到很大的作用。