【问题标题】:page faults while reading a large file读取大文件时出现页面错误
【发布时间】:2014-07-25 05:58:35
【问题描述】:

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

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

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

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

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

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

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

提前致谢

【问题讨论】:

  • 使用 mmap 读取文件
  • 文件在这里无关紧要。要查看页面错误,您必须访问大量虚拟内存。这段记忆来自哪里并不重要。您可以使用 mmap 进行映射,也可以使用 malloc 进行分配。

标签: c page-fault


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2018-10-13
    • 2013-06-28
    • 2020-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多