解决 mmap 的随机内存分配问题,以实现跨进程的高效数据共享

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

我正在做一个项目,我需要将一个大数组加载到内存中,构造各种索引和衍生数据,并在完成加载和处理后,确保从其他进程访问这些数据的最大速度,而不需要使用SQL/NoSQL 和进程间通信 (IPC)。此外,利用这些处理后的数据的过程几乎需要立即启动。

在这种场景下使用mmap替代堆来实现快速访问另一个进程创建的内存数据而不需要重新处理是否可行?

此外,我面临着通过 mmap 动态分配地址的挑战,它在地址空间中分配随机地址。有没有办法改变 mmap 在这方面的行为?我应该考虑使用某种形式的索引或偏移量吗?或者是否有一种完全不同的方法更适合这项任务?

c linux memory ipc mmap
1个回答
0
投票

mmap
可以解决你的问题。它的行为正是您所需要的。

mmap
提供的地址是进程本地的虚拟内存地址。将其视为基地址并使用偏移量来访问内容。

当您在不同的进程中

mmap
相同的文件时,它会给出另一个地址,该地址将是新进程本地的虚拟内存地址。再次将该地址视为新进程访问的基地址,并像以前一样使用偏移量。

文件系统将使所有进程通过文件名访问数据。如果您不希望其他进程访问数据,您可以使用

memfd_create
并使用其他 IPC 机制发送文件描述符。

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