我已经实现了一个简单的共享memeory代码,它分散在两个进程中(1行为编写器和其他作为阅读器的行为)。但是我想管理这个SHM代码(就像内存管理器),它独立于任何读写器进程工作。通过简单地给一些钩子/指针在外面,任何人都可以为我提供一个方法。或有关相关信息的相关代码或链接?还有一个我可以使用Zygote进程来实现它吗?请建议?在C++中实现共享内存管理器
回答
应用程序无法在现代操作系统上使用普通指针“共享”其内存。这需要操作系统的帮助,并且高度依赖于所讨论的操作系统。例如,在Linux上最好的选择是使用SysV共享内存。
确保您了解多进程共享内存的开销,并问自己是否仅使用线程是不够的。在大多数情况下,线程就足够了,否则你应该重新认为你的模型使用消息传递/共享模型。
是的,它只与Linux操作系统相关的问题。但在我的应该有两个独立的进程,其中一个充当守护进程将数据写入SHM。但我不想将SHM代码保存到守护进程中。 – Chandra
我强烈反对SysV共享内存。 POSIX共享内存(在/ dev/shm中创建一个文件,这应该是内存支持的文件系统)并将其映射为Linux上的首选方法。它的接口更简单,冲突的可能性更低(因为它是通过与SysV IPC的整数相比的字符串来命名的),并且如果在打开它之后取消链接文件(对于SysV IPC,您无法执行任何类似操作),您可以确保内核将其清除。 –
进程间POSIX共享内存的开销与线程相比非常小。唯一的区别是,在进程之间切换时,页面表需要重新加载,而线程共享相同的内容,因此在那里不需要。另一方面,流程更容易处理。 –
看看Boost.Iterprocess能为你做些什么。特别看看Managed Memory Segments部分。
- 1. 使用共享内存实现管道
- 2. openstack中的云共享内存管理
- 3. C或C++堆内存管理实现
- 4. 内存管理,同时实现用C
- 5. boost管理共享内存段错误
- 6. C共享内存
- 7. 使用共享内存和信号量实现管
- 8. 在Python中使用管理器共享对象(类实例)
- 9. C - 处理共享内存时出现分段错误
- 10. C++共享内存泄漏,如何清除共享内存?
- 11. 共享内存中内部进程的屏障实现
- 12. 如何在目标c中实现缓存管理器?
- 13. 共享库中的c,C++内存
- 14. Java和C++共享内存
- 15. C内存共享问题
- 16. C#并发共享内存
- 17. C-fork()和共享内存
- 18. Apache Ignite C++,共享内存
- 19. 如何在Windows中实现共享内存?
- 20. 在OpenCL中,如何在CPU上实现私有内存和共享内存?
- 21. 管理器中没有“共享”按钮
- 22. 在共享内存
- 23. 矩阵实现类中的内存管理C++
- 24. 在C++中使用共享内存的远程代理
- 25. 管理共享内存中的互斥量
- 26. linux共享内存实际在哪里?
- 27. 在多处理器中共享Python对象:值或管理器
- 28. 在具有动态大小内存池的多线程C/C++中实现内存管理器?
- 29. 多处理中的共享内存
- 30. 内存共享
什么是Zygote进程?如果这是在特定操作系统上进行的处理,请使用该操作系统的适当标记来标记问题。 –
事实上,请标记您的问题与您正在使用的共享内存的操作系统或可移植实现,因为C++标准不提供共享内存实现。 –