我使用匿名mmap来分配一大块内存。在这里有几个连续的页面,我想使用虚拟内存镜像变成一个环形缓冲区。
This example on Wikipedia通过虚拟内存镜像显示了我的意思。
说下面的前14个街区是我巨大的块中的页面。我想将第6页和第7页虚拟地映射到另外两个连续的位置。
[0][1][2][3][4][5][6][7][8][9][10][11][12][13].......[6][7][6][7]
Mike Ash给出了我想做的a rundown,但是使用了特定于机器的API。
如何在Linux上完成?
答案 0 :(得分:0)
使用匿名映射无法实现。但是,您可以使用memfd_create(2)或在tmpfs上创建一个临时文件(这样就不会将它存储到磁盘上,除非通过“交换”),并且在该文件描述符上彼此相邻地进行共享映射。
remap_file_pages(2)只是一个性能漏洞,没有比传统的mmap / mremap调用强大的功能,它也不能在匿名映射上运行。