内存和文件加载C ++?

Memory & file loading c++?

本文关键字:加载 文件 内存      更新时间:2023-10-16

我写了一个程序,加载文件,我想知道是否有人可以解释为什么加载文件第二次&后续时间比初始加载同一文件快吗?
例如:
1. 第一次加载大文件(500MB)时,所需时间比后续加载相同文件的时间长。在加载文件时,它只需要花费2时间的一小部分时间。
即使RAM使用量在两者之间下降也是如此(重新启动程序时也会出现这种行为)。

2. 如果我重新启动我的电脑和/或不运行程序或在一段时间后重新加载文件,情况#1再次发生。

环境:

    c++
  • vs 2010 (mfc)
  • Windows XP Home 32位
  • 文件加载:我试过阅读()&

操作系统将在未使用的内存中缓存文件。看到维基百科。这将在重启后消失,或者如果您使用了大量内存,或者如果您打开了更多文件。具体细节因操作系统而异。

对于现代计算机体系结构的更广泛的概述,Herb Sutter的演讲是很好的。

一个可能的解释是您的硬盘可能有缓存。第一次读取文件时,直接从磁盘读取。下一次,驱动器可以从缓存中提供它。经过一段时间的延迟(或重新启动)后,文件的内容不再在缓存中,因此它再次从盘片提供。

在现代操作系统中,没有"未使用内存"这回事。那完全是浪费。操作系统所做的是将文件、目录结构、文件元数据(例如给定文件的数据在磁盘上的位置)和其他有用数据的副本保存在"未使用"的内存中。

所以当你读一个文件时,它被加载到内存中。假设有足够的"未使用"内存,那么该文件确实会在那里待很长时间。最终它可能会被踢出去,因为在你正常使用电脑时,电子邮件软件、网页浏览器、文件内容索引器、反病毒扫描程序、网络时间同步器、地址簿到手机同步器以及系统中运行的所有其他后台代码,所有这些东西都会占用一点"未使用"的内存。

所以,是的,文件被缓存。一个500MB的文件在一个有4或8GB内存的系统中,如果没有使用所有的内存,可能会在那里呆上几分钟、几小时甚至几天。

现在大多数硬盘都有缓存,所以一旦加载一次,它就在缓存中。不过,您可能不想多次加载一个文件!