Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;获取无*序列化的无序_集*的字节表示形式_C++_Serialization_Distributed Computing_Unordered Set - Fatal编程技术网

C++ C++;获取无*序列化的无序_集*的字节表示形式

C++ C++;获取无*序列化的无序_集*的字节表示形式,c++,serialization,distributed-computing,unordered-set,C++,Serialization,Distributed Computing,Unordered Set,在分布式计算设置中,我想向许多节点发送一个无序的_集。我知道C++中的序列化,例如使用 Boo::序列化< /C>。我对序列化的不满是,在接收到序列化数据后,我面临着在每个节点上重建无序集数据结构的成本 我的想法是为无序_集编写一个自定义分配器,该分配器分配固定大小的连续内存,并在分配后返回起始内存地址。然后我想获取无序集的字节表示,通过线路发送它,并告诉接收节点该内存块是一个无序集 这样行吗?你们有别的办法解决我的问题吗?或者您是否有任何相关的指针,例如编写这样的分配器?任何反馈都将不胜感激

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

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

这样行吗?你们有别的办法解决我的问题吗?或者您是否有任何相关的指针,例如编写这样的分配器?任何反馈都将不胜感激


谢谢大家!

这可能是个坏主意,原因如下:

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


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

    这可能是一个坏主意,原因如下:

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


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

    谢谢您的反馈!1+3)所有机器都有相同的硬件和软件。2)是的,这是一个问题-我希望通过某种方式(例如使用相对地址)来避免这一问题。所以,仅仅发送键值对就可以再次归结为序列化,但也许这就是最终的方法。。。再次感谢@Christian:您不能使用相对地址,因为您无法访问
    无序映射
    的内部。@Christian:即使使用相同的软件,许多哈希表哈希也会在其结构中注入随机性,从而使攻击者选择的数据DoS攻击更加困难。(也就是说,攻击者专门设计了一些数据,以强制哈希表的最坏情况为O(n)情况,从而对服务施加高负载)感谢您的反馈!1+3)所有机器具有相同的硬件+软件。2) 是的,这是一个问题-我希望以某种方式绕过这个问题,例如使用相对地址。所以,仅仅发送键值对就可以再次归结为序列化,但也许这就是最终的方法。。。再次感谢@Christian:您不能使用相对地址,因为您无法访问
    无序映射
    的内部。@Christian:即使使用相同的软件,许多哈希表哈希也会在其结构中注入随机性,从而使攻击者选择的数据DoS攻击更加困难。(也就是说,攻击者制作一些专门设计用于强制哈希表的最坏情况为O(n)的数据,以便对服务施加高负载)