我正在使用4GB ram的系统。我创建了一个4GB的大文件,并用零初始化它。
我开始用整数读取大文件整数。
我发现无论文件有多大,页面错误(主要)的数量都为零。
我使用FILE指针和文件描述符读取文件。在这两种情况下,我都没有发现任何页面错误(主要)。
为什么会这样?只有在进行内部交换时才会发生程序中的页面错误吗?
如果是,您可以建议一个会导致页面错误的C程序。
我正在研究Ubuntu 12.04,我的电脑规格:4GB内存,500 GB Hardisk
提前致谢
答案 0 :(得分:2)
当您尝试访问虚拟内存中的数据 时会发生页面错误,并且它在RAM中不可用。使用read()
或fscanf()
之类的I / O函数从文件中读取不会这样做;您直接从磁盘请求文件的内容,而不是通过虚拟内存访问
如果使用mmap()
将文件映射到虚拟内存然后尝试访问该内存,则会在文件内容自动加载时看到页面错误。