内存和文件加载C ++?
Memory & file loading c++?
我写了一个程序,加载文件,我想知道是否有人可以解释为什么加载文件第二次&后续时间比初始加载同一文件快吗?
例如:
1. 第一次加载大文件(500MB)时,所需时间比后续加载相同文件的时间长。在加载文件时,它只需要花费2和时间的一小部分时间。
即使RAM使用量在两者之间下降也是如此(重新启动程序时也会出现这种行为)。
2. 如果我重新启动我的电脑和/或不运行程序或在一段时间后重新加载文件,情况#1再次发生。
- c++
- vs 2010 (mfc)
- Windows XP Home 32位
- 文件加载:我试过阅读()&
操作系统将在未使用的内存中缓存文件。看到维基百科。这将在重启后消失,或者如果您使用了大量内存,或者如果您打开了更多文件。具体细节因操作系统而异。
对于现代计算机体系结构的更广泛的概述,Herb Sutter的演讲是很好的。
一个可能的解释是您的硬盘可能有缓存。第一次读取文件时,直接从磁盘读取。下一次,驱动器可以从缓存中提供它。经过一段时间的延迟(或重新启动)后,文件的内容不再在缓存中,因此它再次从盘片提供。
在现代操作系统中,没有"未使用内存"这回事。那完全是浪费。操作系统所做的是将文件、目录结构、文件元数据(例如给定文件的数据在磁盘上的位置)和其他有用数据的副本保存在"未使用"的内存中。
所以当你读一个文件时,它被加载到内存中。假设有足够的"未使用"内存,那么该文件确实会在那里待很长时间。最终它可能会被踢出去,因为在你正常使用电脑时,电子邮件软件、网页浏览器、文件内容索引器、反病毒扫描程序、网络时间同步器、地址簿到手机同步器以及系统中运行的所有其他后台代码,所有这些东西都会占用一点"未使用"的内存。
所以,是的,文件被缓存。一个500MB的文件在一个有4或8GB内存的系统中,如果没有使用所有的内存,可能会在那里呆上几分钟、几小时甚至几天。
现在大多数硬盘都有缓存,所以一旦加载一次,它就在缓存中。不过,您可能不想多次加载一个文件!
- 如何加载(或映射)文件部分的最大大小,但适合在Windows上的RAM
- 树莓上的 Libtorch 无法加载 pt 文件,但在 ubuntu 上工作
- 我的程序有一个保存配置文件的GUI,如何双击此配置文件以直接加载带有配置数据的GUI?
- SDL_LoadWAV未加载文件
- 如果流无法加载文件,并且无法打开
- 无法使用 fopen() 加载文件
- 如何在mac上为c++加载文件
- 如何以编程方式知道Adobe Reader完成了加载文件
- 使用loadFromFile()函数加载文件
- 使用微小的xml保存和加载文件
- C++加载文件
- C++从SQL数据库加载文件
- 从"Resource Files"文件夹加载文件C++ Windows 应用程序 (win32)
- 构建时如何在Visual Studio c++中加载文件
- 用dlsym加载文件,无法加载库
- 当在c#中加载c++ dll时,CLR是否会自动加载c++文件的依赖项?
- OpenCV视频捕获不加载文件
- 用char指针加载文件
- TinyXml解析器拒绝正确加载文件
- CMake 错误在 CMakeLists.txt:56 (include): 包含找不到加载文件: gmxVersion