-1

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

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

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

现在,我真正的问题要深入一点。我在更高级别的编程(ruby、java)方面有很多经验,但从未在 C 或 ASM 中做过大型项目。

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

现在,哈希的常规实现会经常使用 malloc 之类的东西。但这会从共享空间中分配内存。

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

提前谢谢雅各布

4

1 回答 1

1

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

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

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

于 2013-06-18T14:30:05.207 回答