2

我正在使用 4GB ram 的系统。我创建了一个 4GB 的大文件并用零初始化它。

我开始按整数读取大文件整数。

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

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

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

如果是,您能否推荐一个会导致页面错误的 C 程序。

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

提前致谢

4

1 回答 1

2

当您尝试访问虚拟内存中的数据并且它在 RAM 中不可用时,会发生页面错误。使用 I/O 函数从文件中读取,例如read()fscanf()不这样做;您直接从磁盘请求文件的内容,而不是通过虚拟内存访问

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

于 2014-07-25T06:05:18.553 回答