我们能否通过mmap()分配物理连续的内存?

4

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

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

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

在分配之后,我会通过/proc/self/pagemap识别其物理地址。

然而,我找不到任何相关文档。我能否分配物理连续的内存?

谢谢。

1个回答

4
你对物理内存位置的控制非常有限。在一页中,内存是连续的(这或多或少是一个页面的定义)。然而,在虚拟地址空间中相邻的不同页面不一定在物理地址空间中也是相邻的(在物理地址空间中相邻的页面也不一定在虚拟地址空间中相邻)。
除非你要在内核内存管理的最低级别工作,否则你很难快速发现物理连续性。
如果内存在Linux和其他东西之间进行双端口处理,则可能会出现问题,但仅使用mmap()不会解决这些问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接