我正在尝试在 C 中实现一个循环缓冲区,并且在 Wikipedia 上遇到了这个示例(2014 年 7 月删除)。看起来它会为从缓冲区读取的任何人提供一个非常好的接口,因为从缓冲区的末尾到开头的读取是自动处理的。所以所有的读取都是连续的。
但是,我有点不确定是否立即使用它,因为我在内存映射或虚拟内存方面并没有太多经验,而且我不确定我是否完全理解它在做什么。
我想我理解的是,它将缓冲区大小的共享内存文件映射到内存中两次。然后,每当数据写入缓冲区时,它会同时出现在内存中的两个位置。这允许所有读取是连续的。
如果有更多 POSIX 内存映射经验的人可以快速查看代码并告诉我使用的底层机制是否真的那么高效,那将是非常棒的。例如,我是否正确地认为 /dev/shm 中用于共享内存的文件始终保留在 RAM 中,或者它是否可以在某个时候被写入硬盘驱动器(性能下降)?有什么我应该注意的问题吗?
就目前而言,我可能会为我当前的项目使用一种更简单的方法,但最好理解这一点,以便将来在我的工具箱中使用它。
在此先感谢您的时间。