我们可以通过mmap()分配物理上连续的内存吗?

时间:2018-11-05 05:57:19

标签: c linux memory mmap

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

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

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

分配后,我将通过/proc/self/pagemap标识其物理地址。

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

谢谢。

1 个答案:

答案 0 :(得分:3)

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

除非您要在最低级别的内核内存管理中工作,否则您将不会着急发现物理连续性。

如果内存在Linux和其他操作系统之间是双端口的,则可能会有问题,但是仅使用mmap()并不能解决问题。