【发布时间】:2013-04-03 16:04:27
【问题描述】:
我有一个生成大量数据的应用程序,我希望它可供另一个 C++ 应用程序访问。平台是 RHEL5,如果重要的话是 g++。
以前,我这样做的方法是将数据写入 /dev/shm(基本上是一个 linux 内存驱动器),然后让其他应用程序从那里读取它。
但是,这似乎非常低效,因为有一个 ofstream,然后是一个 ifstream,并将数据重新加载到内存中。此外,将数据作为文本文件存储在内存中似乎比仅将其保存为内存需要更多空间(尽管我不是 100% 确定这是真的)。
我要分享的数据是
vector< vector<struct> > mydata;
我希望其他应用程序能够执行类似的操作
mydata.at(ii).back()
检索它需要的数据。 mydata 中实际上会有相当多的数据。如果我将它打印成 CSV 格式的文件,它可能是 10GB。我正在使用的服务器有 24GB 的内存,应该足以处理这个问题。
此外,当第一个应用程序向 mydata 添加更多条目时,会发生这种检索(所以可能存在潜在的竞争条件?)。
C++中有没有办法共享vector
【问题讨论】:
-
你熟悉管道吗?
-
它不处理任何同步,但您可以使用
mmap跨应用程序共享内存。您可以使用placement new将向量放入mmap提供的内存中,但似乎您可能必须编写自己的分配器才能将这些向量的所有元素保留在该内存块中。这种访问可能会比使用fstream快得多,但魔鬼在细节中。 -
嘿,你能分享一下你是如何使用boost库实现的吗?我也遇到了类似的问题
标签: c++ vector shared-memory