【问题标题】:Bool array problems in c++C++中的布尔数组问题
【发布时间】:2011-10-02 10:10:21
【问题描述】:

是否也像 vector<bool> 那样“优化”了布尔数组?我想制作真假数组,但我也不希望vector<bool> 的一些问题出现在数组中,例如访问时间慢

【问题讨论】:

  • 您到底需要什么?内存高效存储?快速地?疏?可生长?想要像访问数组一样访问它等等。
  • 理解它的好方法 - 坐在你的电脑前用一个调试器。
  • 我想快速访问二维数组中的单个值
  • “二维数组”?这和你原来的问题有什么关系??
  • 我想我们可以肯定地说一件事:在基本设计阶段,不用担心布尔数组的布局。甚至还不能保证 bool 访问将成为比您的大网络编码错误更大的瓶颈 ;-)

标签: c++ arrays boolean


【解决方案1】:

bool[N] 将在内存中占用 N 次 sizeof(bool) 连续字节。

【讨论】:

  • 这将使用每个 bool 元素 1 个字节,对吧?我也想知道如何让它每个只使用一点,但我想这并不容易实现对吧?
  • @GeoPapas:已经在std::vector<bool>为你实现了这样的优化,由专业人士编写。
  • 感谢您的回复,我想实现一个用于 cuda 的快速布尔数组。这个 std::vector 实现是否足够且快速?据我所知,这仅用于最小的空间管理,而不是最佳速度。有什么建议?提前致谢!
  • 嗯,我发现它说:Simultaneous access to different elements is not guaranteed to be thread-safe (as storage bytes may be shared by multiple bits). 也许这不适合 cuda。
  • @GeoPapas:这是一个复杂的问题,有很多细节和权衡。 std::vector<bool> 不保证任何特定的实现,并且在任何情况下都很难与 CUDA 内存一起使用。也许 Thrust 有一个打包的位集?但正如您所说,共享可能是一个非常糟糕的性能问题。
【解决方案2】:

针对速度进行了优化,每个单词一个布尔值,因此它不需要进行屏蔽和读取-修改-写入操作。空间优化是每个单词包含 32 个布尔值,因此您必须更具体地了解“优化”的含义。

【讨论】:

  • 优化vector<bool> 失败
  • 经验丰富的 C++ 人员会在您用吓人的引号说“优化”时理解您的意思,但最好是明确的。据我所知,您是在询问 bools 的任何聚合是否被打包,或者只是 vector<bool>。你应该直接说出来,而不是暗示。
  • 赞成它,对我来说似乎很好。 calccrypto,你投反对票了吗?
【解决方案3】:

我认为C++默认实现主要是为了节省空间,而访问时间可能会受到影响。

如果您需要更快的访问时间,您可能需要自己实现它并牺牲空间。

【讨论】:

  • 但是请注意,在许多情况下,对访问时间的影响是积极的。较小的表示更适合缓存。
  • 错误,不,Kerrek SB 的回答是正确的。 数组必须占用N * sizeof(bool)内存,这意味着空间优化。
猜你喜欢
  • 2012-06-03
  • 1970-01-01
  • 2019-10-06
  • 2019-09-14
  • 2022-06-16
  • 1970-01-01
  • 2019-11-20
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多