C ++获取unordered_set *的字节表示,不带*序列化

时间:2013-02-18 19:24:15

标签: c++ serialization distributed-computing unordered-set

在分布式计算设置中,我想向许多节点发送unordered_set。我知道C ++中的序列化,例如使用boost::serialization。我对序列化的看法是,我在收到序列化数据后面临在每个节点上重建unordered_set数据结构的成本。

我的想法是为unordered_set编写一个自定义分配器,它分配一个固定大小的连续内存,并在分配后返回起始内存地址。然后我想获取unordered_set的字节表示,通过线路发送它,并告诉接收节点这个内存块是unordered_set

那会有用吗?你们有没有其他想法如何解决我的问题?或者你有任何相关的指针,例如写这样的分配器?任何反馈都表示赞赏。

谢谢!

1 个答案:

答案 0 :(得分:5)

由于以下几个原因,这可能是一个坏主意:

  1. 通常,从一台机器到另一台机器的哈希实现会有所不同,因此您的哈希表在接收机器上不再有效。
  2. 哈希表实现通常包含指针。你不能只是将指针从一台机器复制到另一台机器;它们是绝对地址(在大多数平台上)。
  3. 发送机器和接收机器可能有不同的字节顺序(比如发送机器是x86而接收机器是POWER(例如XBox),在这种情况下,你得到的结果将完全是乱码。
  4. 我只会发送一个键/值对列表。将它们插入到接收端构建的哈希表中。

    另外,请记住,通过线路发送内容时,与带宽成本相比,处理能力成本通常很小。散列表空间效率低 - 它们需要大量空桶才能保持近O(1)性能。因此,即使您可以实现一种方法来按原样发送哈希表,整体性能也可能会更差。