我目前正在通过Unix上的mmap试验IPC。
到目前为止,我能够将10MB的稀疏文件映射到RAM中,并从两个独立的进程中读取和写入。太棒了:))
现在,我正在将mmap返回的内存段的地址类型转换为char *,因此我可以将它用作普通的旧cstring。
现在,我真正的问题进一步深入探讨。我对编程水平较高(ruby,java)有很多经验,但从未在C或ASM中做过大型项目。
我想使用映射的内存作为变量分配的地址空间。我不敢说这是可能的,或者根本没有任何意义。我想到某种类似哈希映射的数据结构,它纯粹存在于共享段中。这将允许使用IPC进行一些有趣的实验,即使使用其他语言如ruby而不是FFI。
现在,定期实现哈希会经常使用像malloc这样的东西。但是这会将内存分配给共享空间。
我希望,你理解我的想法,虽然我的英语不是最好的!
提前谢谢你 雅各布
答案 0 :(得分:0)
总的来说,您可以将mmap
返回的内存视为malloc
返回的内存。但是,由于存储器可以在多个“不相关”进程之间共享,并且可以独立调用mmap
,因此每个进程的起始地址可能不同。因此,您在共享内存中构建的任何数据结构都不应使用直接指针。
而不是指针,应该使用初始地图地址的偏移量。然后,数据结构将通过将偏移量添加到mmamp
区域的起始地址来计算右指针值。
数据结构将通过对mmap
的单个调用构建。如果需要扩展数据结构,则必须扩展mmap
区域本身。支持文件扩展后,可以使用mremap
或手动munmap
和mmap
完成。