如何像内存一样制作基于磁盘的缓冲区?

时间:2014-08-07 12:47:06

标签: c linux buffer

我在这个网站上看到过类似的问题,但是没有有用的答案。

  

方案
  以下是数据传输过程,
  嵌入式设备 --------> 缓冲区 --------> AWS Cloud存储

     

条件
  由于嵌入式设备的限制,没有足够的内存来存储数据。

     

我的想法
  使用mmap()在磁盘上分配“内存”,并管理另一个lib上的数据中继,这是一个在github上的开源库。

     

问题
  但是,我刚才发现它会占用真实内存中的内存。这种方法似乎无法解决我的病情。

你的想法是什么?好友...

1 个答案:

答案 0 :(得分:0)

所有 mmmap(2)都是为了避免在用户空间应用程序的缓冲区和内核保持缓冲区之间进行额外的数据复制操作。映射的真实文件部分成为应用程序虚拟地址空间的一部分,占用块缓存中的物理内存,即使您使用的是匿名映射(没有后备文件的映射,fd arg设置为-1) )。

因此,通过移动mmap(2)窗口,您可以直接访问保存文件数据的内核缓冲区缓存。使用4K地图窗口对应虚拟内存映射硬件功能,您的文件可以是任意大小,但只能在文件中使用4K地图窗口。

关于mmap(2)的好处是你可以打开文件,创建mmap(2)窗口,然后关闭文件。现在,您可以使用加载/存储来访问文件数据,将映射窗口视为数据数组对象。