虚拟内存:操作系统是否始终将整个文件加载到物理内存中?

问题描述 投票:0回答:1

我正在研究虚拟内存的工作方式,我不确定如果加载具有fread()和类似内容的大文件(虽然小于物理内存)会发生什么。

据我了解,操作系统可能不会分配整个相应的物理内存。相反,它可以等到我的程序读取文件的特定部分(尚未映射到物理内存的部分)时触发页面错误。

这基本上是内存映射文件的行为。因此,如果我的假设是正确的,那么使用mmap()这样的系统调用有什么好处?只是为了避免在使用fread()进行阅读时出现惯常的for循环舞曲?

我正在研究虚拟内存的工作方式,我不确定如果使用fread()和类似的东西加载一个大文件(虽然小于物理内存)会发生什么。据我了解,正在运行...

memory operating-system hardware virtual-memory
1个回答
0
投票

read(),fread()会将您指定的数量读入您提供的缓冲区中。 Mmap是进入内核文件缓存的单独接口。两者相交的地方是内核最有可能首先将文件读取到缓存缓冲区中,然后将这些缓存缓冲区的选择位复制到用户缓冲区中。]

此双重副本通常是必需的,因为您的程序没有提供底层设备所需的必要对齐和阻止大小,并且如果数据需要转换(解密,解压缩),则它需要一个位置来进行复制。

© www.soinside.com 2019 - 2024. All rights reserved.