Linux上的环形缓冲区的内存镜像

Max*_*Max 5 linux circular-buffer virtual-memory

我使用匿名mmap来分配一大块内存.在这里有几个连续的页面,我想使用虚拟内存镜像变成一个环形缓冲区.

维基百科上的这个例子显示了虚拟内存镜像的含义.

假设下面的前14个区块是我巨大的块中的页面.我想将第6页和第7页虚拟地映射到另外两个连续的位置.

[0][1][2][3][4][5][6][7][8][9][10][11][12][13].......[6][7][6][7]
Run Code Online (Sandbox Code Playgroud)

迈克·阿什给出一个破败的什么我想要做的,但使用马赫特定的API.

怎么能在Linux上完成?

小智 0

使用匿名映射无法实现这一点。但是,您可以使用memfd_create(2)或在 tmpfs 上创建一个临时文件(以便它永远不会存储到磁盘,除非通过“交换”),并在该文件描述符上执行彼此相邻的共享映射。

remap_file_pages(2)只是一个性能黑客,并不比经典的 mmap/mremap 调用更强大,而且它也不能对匿名映射进行操作。

相关:Linux mremap 不释放旧映射?