我正在使用 4GB 内存的系统。我创建了一个 4GB 的大文件并用零对其进行了初始化。
我开始逐个整数地读取大文件。
我发现无论文件有多大,页面错误(主要)的数量都是零。
我使用 FILE 指针和文件描述符来读取文件。在这两种情况下我都没有发现任何页面错误(主要)。
为什么会这样呢?程序中的页面错误是否仅在发生内部交换时才会发生?
如果是的话,您可以建议一个会导致页面错误的 C 程序吗?
我正在使用 Ubuntu 12.04,我的计算机规范:4GB 内存,500 GB 硬盘
提前致谢
最佳答案
当您尝试访问虚拟内存中的数据但 RAM 中不提供该数据时,就会发生页面错误。使用诸如read()
或fscanf()
之类的I/O函数从文件中读取数据并不能做到这一点;您直接从磁盘请求文件内容,而不是通过虚拟内存访问
如果您使用 mmap()
将文件映射到虚拟内存,然后尝试访问该内存,您会在自动加载文件内容时看到页面错误。
关于c - 读取大文件时出现页面错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948971/