gpt4 book ai didi

C++/Linux,在应用程序之间共享内存中的对象

转载 作者:太空宇宙 更新时间:2023-11-04 15:22:26 25 4
gpt4 key购买 nike

我有一个生成大量数据的应用程序,我希望它可供另一个 C++ 应用程序访问。平台是 RHEL5,g++ 如果重要的话。

以前,我这样做的方法是将数据写出到/dev/shm(基本上是一个 linux 内存驱动器),然后让其他应用程序从那里读取它。

但是,这看起来效率很低,因为有一个 ofstream,然后是一个 ifstream,然后将数据重新加载到内存中。此外,将数据作为文本文件存储在内存中似乎比仅将其作为内存占用更多​​空间(尽管我不是 100% 确定这是真的)。​​

我要分享的数据是

的形式
vector< vector<struct> > mydata;

我希望其他应用程序能够做类似的事情

mydata.at(ii).back()

检索它需要的数据。 mydata 中实际上会有相当多的数据。如果我将它打印成 CSV 格式文件,它可能是 10GB。我正在使用的服务器有 24GB 的内存,应该足以处理这个问题。

此外,这种检索将在第一个应用程序向 mydata 添加更多条目时发生(因此可能存在潜在的竞争条件?)。

C++有没有办法共享vector mydata;两个应用程序之间?如果是这样,最好的实现是什么?如果可能,我宁愿避免使用第三方库。

最佳答案

您可能更喜欢避免使用第 3 方库,但最好的快速解决方案就在那里。试用 Boost.Interprocess。它提供了共享内存安全的容器(如 vector)以及易于使用的接口(interface)。它也是仅包含 header 的库之一,这使得它比其他一些库更容易集成。

有关最新版本的文档,请参阅此处的链接:http://www.boost.org/doc/libs/1_53_0/doc/html/interprocess.html

那里也有很多例子。它应该能让您快速了解它的功能。

关于C++/Linux,在应用程序之间共享内存中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15792366/

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