C++ 如何在共享内存中存储字符串数据类型?

C++ 如何在共享内存中存储字符串数据类型?,c++,shared-memory,mmap,C++,Shared Memory,Mmap,我想创建一个程序,其中应用程序的一个实例将创建结构并放入共享内存(如mmap或shm),另一个实例将共享数据 我面临的一个问题是如何将字符串数据类型写入共享内存,因为我的知识字符串类将在运行时分配内存,而这将在应用程序地址空间中 我有以下结构,我想与其他进程共享 struct Node { int id; string description; struct Node* child[10]; //some other data types }; 如果我使用这样的结构,我

我想创建一个程序,其中应用程序的一个实例将创建结构并放入共享内存(如mmap或shm),另一个实例将共享数据

我面临的一个问题是如何将字符串数据类型写入共享内存,因为我的知识字符串类将在运行时分配内存,而这将在应用程序地址空间中

我有以下结构,我想与其他进程共享

struct Node
{
   int id;
   string description;
   struct Node* child[10];
   //some other data types
};
如果我使用这样的结构,我可以在进程之间共享数据

struct Node
{
   int id;
   char description[20];
   struct Node* child[10];
   //some other data types
};

但我不想使用字符数组,有人能建议任何可能的解决方案吗…

对于字符串,您可以这样存储: 一个共享内存存储固定大小的成员 结构体类型 { int-id; 字符*描述地址; int desc_尺寸; 结构节点*子节点地址; int child_大小; //其他一些数据类型 };

另一个共享内存存储动态大小值: 所以desc_地址和child_地址可以指向另一个共享内存


这里使用的策略是:拆分动态和固定

您可以使用Boost.IPC的共享内存分配器。谢谢@KerrekSB,我将检查Boost库。没有答案,因为您声明不想使用它,尽管我认为字符数组将是您的解决方案。您必须提供最大长度,但您可以尽可能多地创建一个使用std::string的接口。理论上,可以为std::string提供一个分配器,以某种方式使用共享内存,但这可能需要在两个实例之间同步的内存上安装一个内存管理器。谢谢@stefaanv和@Bartek,我将尝试使用typedef basic_string管理我的代码