gpt4 book ai didi

macos - 为什么使用 SysV 或 POSIX 共享内存而不是 mmap()?

转载 作者:行者123 更新时间:2023-12-01 17:43:26 45 4
gpt4 key购买 nike

需要使用 IPC 将大量数据(200kb+)从 OS X 10.4 及更高版本的子进程传递到父进程,我阅读了 Unix 上的共享内存,特别是 System V 和 POSIX 共享内存机制。然后我意识到 mmap() 可以与 MAP_ANON 和 MAP_SHARED 标志一起使用来执行类似的操作(或者仅与 MAP_SHARED 标志一起使用,如果我不介意创建常规文件)。

我的问题是,有什么理由不只使用 mmap() 吗?看起来简单多了,内存仍然是共享的,如果我使用MAP_ANON,则不必创建真正的文件。我可以在父进程中创建文件,然后 fork() 和 exec() 子进程并在子进程中使用它。

问题的第二部分是,这种方法不够充分并且必须使用 SysV 或 POSIX 共享内存机制的原因是什么?

请注意,我计划使用其他通信所需的管道进行同步,即父级通过管道请求数据,子级将其写入共享内存,并通过管道响应其准备就绪。没有涉及多个读者或作者。可移植性不是优先考虑的问题。

最佳答案

如果你有父/子关系,那么使用 mmap 就完全没问题了。

sysv_shm是原始的unix实现,允许相关和不相关的进程共享内存。 posix_shm 标准化共享内存。

如果您使用的是没有 mmap 的 posix 系统,则可以使用 posix_shm。如果您使用的是没有 posix_shm 的 unix,则可以使用 sysv_shm。如果您只需要与父/子共享内存,您可以使用 mmap(如果可用)。

关于macos - 为什么使用 SysV 或 POSIX 共享内存而不是 mmap()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1123490/

45 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com