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

Chr*_*ian 0 c++ serialization distributed-computing unordered-set

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

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

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

谢谢!

Bil*_*eal 5

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

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

我只会发送一个键/值对列表.将它们插入到接收端构造的哈希表中.

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