c - 读取大文件时出现页面错误

标签 c page-fault

我正在使用 4GB 内存的系统。我创建了一个 4GB 的大文件并用零对其进行了初始化。

我开始逐个整数地读取大文件。

我发现无论文件有多大,页面错误(主要)的数量都是零。

我使用 FILE 指针和文件描述符来读取文件。在这两种情况下我都没有发现任何页面错误(主要)。

为什么会这样呢?程序中的页面错误是否仅在发生内部交换时才会发生?

如果是的话,您可以建议一个会导致页面错误的 C 程序吗?

我正在使用 Ubuntu 12.04,我的计算机规范:4GB 内存,500 GB 硬盘

提前致谢

最佳答案

当您尝试访问虚拟内存中的数据但 RAM 中不提供该数据时,就会发生页面错误。使用诸如read()fscanf()之类的I/O函数从文件中读取数据并不能做到这一点;您直接从磁盘请求文件内容,而不是通过虚拟内存访问

如果您使用 mmap() 将文件映射到虚拟内存,然后尝试访问该内存,您会在自动加载文件内容时看到页面错误。

关于c - 读取大文件时出现页面错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24948971/

相关文章:

c - 区分各种 Qx 定点类型?

assembly - 在 x86 32 位中禁用分页

c - C语言中如何将char类型转换为double类型?

c - 使用 C 在 pic 程序存储器中存储在数组中的字符串中添加特定值

我可以相信 (uintptr_t)NULL 等于零吗?

c - 零填充需求是如何在 Linux 内核中实现的,我可以在哪里禁用它?

linux - 如何使用 vm_operations 结构来拦截特定页面集的页面错误?

c - Y 不递增

linux-kernel - 当 mov 指令导致 x86 上禁用中断的页面错误时会发生什么?

windows - 为什么设备驱动程序会导致页面错误?