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

问题描述 投票:6回答:1

我使用匿名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上完成?

linux virtual-memory circular-buffer
1个回答
0
投票

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

[remap_file_pages(2)只是一个性能突破,没有比传统的mmap / mremap调用强大得多,它也不能在匿名映射上运行。

相关:Linux mremap without freeing the old mapping?

© www.soinside.com 2019 - 2024. All rights reserved.