如何使用mmap文件映射变量

时间:2013-06-18 14:20:12

标签: c unix memory-management ipc mmap

我目前正在通过Unix上的mmap试验IPC。

到目前为止,我能够将10MB的稀疏文件映射到RAM中,并从两个独立的进程中读取和写入。太棒了:))

现在,我正在将mmap返回的内存段的地址类型转换为char *,因此我可以将它用作普通的旧cstring。

现在,我真正的问题进一步深入探讨。我对编程水平较高(ruby,java)有很多经验,但从未在C或ASM中做过大型项目。

我想使用映射的内存作为变量分配的地址空间。我不敢说这是可能的,或者根本没有任何意义。我想到某种类似哈希映射的数据结构,它纯粹存在于共享段中。这将允许使用IPC进行一些有趣的实验,即使使用其他语言如ruby而不是FFI。

现在,定期实现哈希会经常使用像malloc这样的东西。但是这会将内存分配给共享空间。

我希望,你理解我的想法,虽然我的英语不是最好的!

提前谢谢你 雅各布

1 个答案:

答案 0 :(得分:0)

总的来说,您可以将mmap返回的内存视为malloc返回的内存。但是,由于存储器可以在多个“不相关”进程之间共享,并且可以独立调用mmap,因此每个进程的起始地址可能不同。因此,您在共享内存中构建的任何数据结构都不应使用直接指针。

而不是指针,应该使用初始地图地址的偏移量。然后,数据结构将通过将偏移量添加到mmamp区域的起始地址来计算右指针值。

数据结构将通过对mmap的单个调用构建。如果需要扩展数据结构,则必须扩展mmap区域本身。支持文件扩展后,可以使用mremap或手动munmapmmap完成。