【问题标题】:Can we allocate physically contiguous memory by mmap()?我们可以通过 mmap() 分配物理上连续的内存吗?
【发布时间】:2019-04-08 11:57:50
【问题描述】:

出于实验目的,我需要 aarch64 Linux 4.15 中物理上连续的内存。

我猜如果所需的大小小于页面大小,分配的内存可能是物理上连续的,如下所示。

void * p = mmap(0, getpagesize() - 1, PROT_READ | PROT_WRITE, MAP_SHARED, 0, 0);

分配后,我会用/proc/self/pagemap来识别它的物理地址。

但是我找不到任何关于此的文档。 我可以分配物理上连续的内存吗?

谢谢。

【问题讨论】:

    标签: c linux memory mmap


    【解决方案1】:

    您几乎无法控制物理内存位置。在一个页面内,内存将是连续的(它或多或少是一个页面的定义)。但是在虚拟地址空间中连续的不同页面在物理地址空间中不一定是连续的(在物理地址空间中连续的页面在虚拟地址空间中也不一定是连续的)。

    除非您将在内核内存管理的最低级别工作,否则您无法快速发现物理连续性。

    如果内存在 Linux 和其他系统之间是双端口的,那么您可能会遇到问题,但仅使用 mmap() 不会解决这些问题。

    【讨论】:

      猜你喜欢
      • 2012-01-08
      • 2023-04-08
      • 2015-09-29
      • 1970-01-01
      • 2015-01-26
      • 1970-01-01
      • 2014-03-28
      • 1970-01-01
      • 2018-09-10
      相关资源
      最近更新 更多