我一直都知道主内存缓存从磁盘上的文件读取的数据,但是我无法将其与程序的典型内存使用情况进行协调,如下图所示:
如果我在一个非常大的文件fread
上使用fgetl
或2010Stats.txt
,上面图表的哪个部分会从磁盘缓存数据?
答案 0 :(得分:3)
这是您的流程的地址空间。每个进程都有自己的虚拟内存地址空间。除非您mmap
一个文件,否则只有read
系统调用或同等文件复制时,其数据才会显示在进程的内存中。 (C stdio / iostream函数将在类似系统调用的基础上实现。)
磁盘缓存由操作系统内核管理,操作系统内核必须跟踪内存物理页面的使用方式,以及每个进程的虚拟地址映射。