我有一个大小为 1GB 且包含序列化数据的只读文件。我有 2 个重复的进程想要将文件反序列化为 C++ 对象并在我的程序中使用它们。使用 mmap,我似乎可以映射文件并防止重复使用内存将序列化文件加载到内存中。有没有一种方法可以让进程 1 反序列化文件,在内存中创建对象,然后进程 2 重用反序列化的对象?因此,只分配内存一次,而不是两次。
我尝试使用 mmap 然后反序列化,但似乎它会重复内存,因为反序列化会分配内存来构造反序列化对象。
它会复制内存,因为你想使用不同的程序,即不同的进程。并且进程是隔离的。
一种可能的解决方案是只有一个进程处理文件对象本身,但不同的进程使用该文件数据。例如,您可以创建某种“服务”应用程序来打开此文件以进行独占访问。它可以使用某种进程间消息传递并进入消息循环来为其他应用程序提供服务,并根据其他进程的请求提供文件中包含的所需信息。一般来说,这样的设计很容易实现,但复杂性始终取决于数据的语义复杂性和可能的请求。 服务和消息传递机制的特定形式取决于平台和其他因素,但它们通常确实存在于各处。
我想重申,我的建议并不作为最终决定,只是一个例子。这取决于您选择什么。