如何使用mmap创建共享std :: vector <std :: string>?

时间:2015-11-17 20:55:30

标签: c++ string vector shared-memory mmap

在我的程序中,我使用fork创建了一些子进程,我想在它们之间共享std :: vector。 我知道mmap,我尝试使用自己的分配器,它使用mmap。

我的分配器类在这里: https://gist.github.com/ADKosm/798bf4caebbc5e087d86

如果我使用此分配器创建vector<int>std::vector<int, mmap_allocator<int> > - 所有过程都可以操纵此向量的副本。

但是如果我尝试使用std::vector<std::string, mmap_allocator<std::string> > - 每个进程只能访问它的容器副本。

我也尝试使用

#define shared_string std::basic_string<char, std::char_traits<char>, mmap_allocator<char> >
std::vector<shared_string, mmap_allocator<shared_string> >

但它也不起作用。

如何在forked proccesses之间共享此容器?

PS。抱歉错误 - 我只是在学习英语

1 个答案:

答案 0 :(得分:1)

您还需要将分配器提供给std :: string。由于std :: string是std :: basic_string的typedef,所以你实际上必须使用std::basic_string<char, mmap_allocator<char> >