【问题标题】:How can I create shared std::vector<std::string> using mmap?如何使用 mmap 创建共享 std::vector<std::string>?
【发布时间】:2015-11-17 20:55:30
【问题描述】:

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

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

如果我用这个分配器创建vector&lt;int&gt;std::vector&lt;int, mmap_allocator&lt;int&gt; &gt; - 所有进程都可以操作这个向量的单一副本。

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

我也尝试使用

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

但它也不起作用。

如何在分叉的进程之间共享这个容器?

PS。抱歉,我只是在学习英语

【问题讨论】:

  • std::string 还分配不使用 mmap_allocator 的内部缓冲区。所以你可能需要用你的分配器类型定义string。但我不确定std::string 是否支持它。我从来没有尝试过。您需要阅读 std::string 构造函数文档。

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


【解决方案1】:

您还需要将分配器提供给 std::string。由于 std::string 是 std::basic_string 的 typedef,因此您实际上必须使用 std::basic_string&lt;char, mmap_allocator&lt;char&gt; &gt;

【讨论】:

    猜你喜欢
    • 2021-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 1970-01-01
    相关资源
    最近更新 更多