繁体   English   中英

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

[英]How to make disk-based buffer just like memory?

我在此站点上看到了类似的问题,但是没有有用的答案。

场景
以下是数据传输过程,
嵌入式设备 --------> 缓冲区 --------> AWSCloud Storage

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

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

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

你有什么主意? 伙伴...

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM