gpt4 book ai didi

c++ - 使用整数存储许多 bool 值是否值得?

转载 作者:行者123 更新时间:2023-12-05 00:51:28 27 4
gpt4 key购买 nike

我正在考虑减少内存占用的方法,并且经常提到 bool作为处理器设计的副产品,它占用的内存超过了逻辑上的需要。有时还提到一个可以存储多个 boolint 内.我想知道这是否真的会更节省内存?

如果我们有一个可以使用 32(或 64)的重要部分的用例 bool .我们决定将它们全部存储在一个 int 中。然后在我们保存的表面上

7 (bits) * 32 (size of int) = 224 (bits) or 28 (bytes)

但是为了从 int 中获取每个位,我们需要使用一些掩码方法如:

  • 位移int双向(int<<x)>>y在这里,我们需要加载和存储可能是 int 的 x,y,但您可以根据用例将它们变小
  • 屏蔽int : int & int2这里我们还存储了一个额外的 int,它被存储和加载

即使这些不作为变量存储,并且它们是在代码中静态定义的,它最终仍会使用额外的内存,因为它会增加指令的内存占用。以及掩蔽步骤的说明。

有什么方法可以做到这一点,实际上不会比仅仅处理 7 个浪费的位更糟吗?

最佳答案

您正在描述一个权衡取舍的教科书示例。
是的,一个 int 中的几个 bool 本身就具有更高的内存效率。
是的,您需要花费代码才能使用它。
是的,只有少数 bool 值(对于不同的“少数”值),代码占用的空间可能比您节省的空间多。

但是,您可以查看所使用的内存类型。在某些环境中,RAM(由您的想法保存)比 ROM(必须为您的想法付费)贵得多。
此外,付出的代价大多是为实现支付一次,而只为使用支付一小部分,尤其是在使用代码被重用时,例如在循环中。

总而言之,如果有很多 bool 值,您可以节省超过您支付的费用。
实际保存点需要针对特殊情况确定。

另一方面,您错过了创意价格标签上的“货币”。您不仅需要为内存付费,还需要为执行时间付费。你的问题集中在内存上,所以我不会在这里详细说明。但是对于任何时间紧迫的事情,您应该考虑更长的执行时间。您可能会发现您的想法可以节省内存,但整个过程变得慢得令人难以忍受。
另一方面,正如 Eric Postpischil 在评论中指出的那样,由于更好的内存占用带来的缓存效应,执行速度也可以提高。

关于c++ - 使用整数存储许多 bool 值是否值得?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71885286/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com