记忆与文件加载c ++?

时间:2013-03-14 22:05:57

标签: c++ file memory loading

我已经编写了一个加载文件的程序,我想知道是否有人可以解释为什么将文件加载到第二个和后续时间比同一文件的初始加载速度快?
例如:
1.首次加载大文件(500MB)时,需要比后续加载同一文件更长的时间。加载文件2 nd 时,只需要一小部分时间。
即使RAM使用率介于两者之间也是如此(重新启动程序时也会出现此行为)。

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

环境:

  • C ++
  • VS 2010(MFC)
  • Windows XP Home 32位
  • 文件加载: 我试过fread()&其他人,但他们都得到了类似的结果。

感谢您的任何见解。

4 个答案:

答案 0 :(得分:5)

您的操作系统会将文件缓存在未使用的内存中。见wikipedia。这将在重新启动后消失,或者如果您使用大量内存,或者您打开了更多文件。详细信息因操作系统而异。

有关现代计算机体系结构的更广泛概述,Herb Sutter的this talk很好。

答案 1 :(得分:1)

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

答案 2 :(得分:1)

在现代操作系统中,没有"未使用的内存"。那将是一个完全浪费。操作系统的作用是保存文件,目录结构,文件元数据的副本[例如磁盘上给定文件的数据的位置]以及"未使用的"中的其他有用数据。记忆。

因此,当您读取文件时,它会被加载到内存中。假设有足够的"未使用"记忆,那个档案确实会在那里坐很久。最终它可能会被踢出去,因为在您正常使用您的计算机,电子邮件软件,网络浏览器,文件内容索引器,防病毒扫描程序,网络时间同步器,地址簿到手机同步器和所有其他背景代码在你的系统中运行,并且所有这些东西都会消耗掉一些"未使用的"记忆。

所以,是的,文件被缓存了。系统中的500MB文件具有4或8GB的RAM并且不使用所有RAM可能会在那里停留数分钟,数小时甚至数天。

答案 3 :(得分:0)

现在大多数硬盘都有缓存,所以一旦你加载了一次,就会在缓存中。您可能不希望多次加载文件!