C++在不进行*序列化的情况下获取unsodered_set*的字节表示

C++ Get byte representation of unordered_set *without* serialization

本文关键字:unsodered set 字节 表示 获取 情况下 序列化 C++      更新时间:2023-10-16

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

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

这样行吗?你们对如何解决我的问题有其他想法吗?或者你有任何相关的指针吗?例如,写这样一个分配器?如有任何反馈,我们将不胜感激。

谢谢!

这可能是个坏主意,原因有几个:

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

我只想发送一个键/值对的列表。将它们插入在接收端构建的哈希表中。

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