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

标签 linux virtual-memory circular-buffer

我使用匿名 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 调用更强大,而且它也不能对匿名映射进行操作。

相关:Linux mremap without freeing the old mapping?

关于linux - Linux 上环形缓冲区的内存镜像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21112673/

相关文章:

arrays - bash 中的关联数组用于存储所有以 X 开头的行

c - 从文件读取时获取结构中的垃圾值

linux - 如何在没有 termcap 文件只有 terminfo 的情况下更改 Fedora 20 上的终端设置

c++ - 为什么创建一个由不同进程共享的环形缓冲区如此困难(在 C++ 中),我做错了什么?

linux - 在 Perl 中添加默认系统换行符

windows - 在 Windows 上的内存区域上设置 PAGE_NOACCESS 和 VirtualLock

ios - 核心数据过多 VM : SQLite page cache

c++ - 增加 Virtual Bytes 的操作和函数

java - Disruptor - 环形缓冲区

用于 mpeg-ts 的具有恒定时间延迟的 c 循环缓冲区