在共享内存中共享std :: string

时间:2015-06-11 05:22:14

标签: string c++11 memory-management

我希望使用共享内存在各个进程之间共享std::string。但是,我担心字符串对象在堆栈或堆上的分配位置,因为这会影响共享。

参考此内容,MSDN Forum

......它说:

  

请注意在新的STL(Visual Studio 2003和2005)中   std :: string类使用分配字符串的组合变体。如果   长度很长,然后字符串在堆区域中分配,但如果   很短,它存储在类的预分配区域

我不知道字符串可能有多长......我不想为它分配任何固定内存。

我打算做的只是......

wstring somestring;
somestring.sppend(someOtherString); //several times

我认为wstring somestring[256]将在堆栈中,因此我可以轻松地分享。但是如果我不希望分配大小呢?如果规模超过阈值会发生什么?

1 个答案:

答案 0 :(得分:1)

  

我希望在使用共享内存的进程之间共享一个std :: string。

您不能跨进程边界共享非POD类型,尤其是可能在内部分配内存的类型。如果他们使用STL,则无法保证其他进程使用相同版本的STL。即使他们这样做了,他们也会使用不同的内存管理器。

您可以将固定长度的char[]数组分配为共享内存,并将std::string的字符内容复制到其中。

  

我认为wstring somestring[256]将在堆栈中,因此我可以轻松分享。

不,你不能。 somestring本身将在堆栈上,但它是std::wstring个对象的数组,并且std::wstring无法共享。

  

但是,如果我不希望分配尺寸怎么办?如果规模超过阈值会发生什么?

共享内存不是动态大小的。