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



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

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

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

在分配之后,我将通过/proc/self/pagemap来识别它的物理地址。

然而,我找不到任何关于这方面的文件。我可以分配物理连续内存吗?

谢谢。

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

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

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