我使用匿名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我想做的事情,但是使用了特定于Mach的API。
如何在Linux上完成?
这是使用匿名映射无法实现的。但是,您可以使用memfd_create(2)或在tmpfs上创建一个临时文件(这样就不会将它存储到磁盘上,除非通过“交换”),并且在该文件描述符上彼此相邻地进行共享映射。 >
[remap_file_pages(2)只是一个性能突破,没有比传统的mmap / mremap调用强大得多,它也不能在匿名映射上运行。