哪一个更快,从磁盘读取或分配系统内存

Buz*_*uzz 6 c++ windows visual-c++

我的环境是XP 32位.我发现当分配的内存几乎是最大大小,2GB,这意味着有一点虚拟空间可用,分配新内存非常慢.

因此,如果我有一个页面文件,我的应用程序需要分析它们.我有两种方法.一种是将它们全部读入系统内存,然后进行分析.另一种是首先将内存缓冲区作为缓存存储,并将页面文件的一部分读入该缓冲区,进行分析然后丢弃,然后读取页面文件的第二部分,并覆盖缓存,再次进行分析.

从分析中看,第二个更快,因为它避免了分配时间成本.

你怎么看?谢谢,谢谢.

Dew*_*wfy 5

你忘记了3d方式 - 将内存映射到文件,请参阅函数CreateFileMapping/MapViewOfFile这是最快的方式


Ste*_*sop 5

(1)我不确定问题是否与标题相符.如果你在32位Windows上分配接近2GB的RAM,系统可能会将大量内存分页到磁盘,而这就是我首先考虑减速的地方.当您使用大量内存时,您应该将其视为存储在磁盘上(在pagefile.sys中),而是缓存在物理RAM中.第二个可能更快,不是因为分配的成本,而是因为一次使用大量内存的成本.实际上,当您将文件复制到一个大的分配中时,您将大部分磁盘 - >磁盘通过RAM复制,然后当您再次运行它进行分析时,您将再次将该副本加载回RAM.如果您的分析是单程算法,则需要进行大量冗余工作.

(2)我认为是mmap文件(MapViewOfFile和Windows上的朋友).

编辑:(3)谨慎.如果该文件目前是1.8GB,那么明年可能会有4GB.如果是这样,我现在计划在32位机器上使用大于2 ^ 32的大小,这意味着要么采用第二个选项,要么仍然使用MapViewOfFile,但是在一个文件中执行一个合理大小的文件块.时间,而不是一下子.否则,当有人在大文件上尝试并报告错误时,您将重新访问此代码.