关于C#:何时使用STL位集代替单独的变量?

关于C#:何时使用STL位集代替单独的变量?

When to use STL bitsets instead of separate variables?

在什么情况下,使用位集(STL容器)来管理一组标志而不是将它们声明为多个单独的(布尔)变量是否更合适?

如果将位集用于50个标志而不是使用50个单独的bool变量,我将获得显着的性能提升吗?


好吧,作为布尔集的50个布尔将占用7个字节,而作为布尔的50个布尔将占用50个字节。如今,这并不是什么大不了的事情,因此使用布尔值可能没问题。

但是,如果您需要大量传递这些布尔值,尤其是如果您需要从函数返回该布尔值的话,一个位集可能会有用。使用位集,您需要在堆栈上移动的数据较少,以返回数据。再说一次,您可以只使用refs来传递更少的数据。 :)


n


这取决于您所说的"性能提升"。如果您只需要其中的50个,并且您的内存并不低,那么单独的布尔值通常总是比bitsets更好的选择。它们将占用更多的内存,但是速度会更快。通常将位集实现为一个整数数组(布尔值打包成这些整数)。因此,您的位集中的前32个布尔(位)将仅占用一个32位int,但是要读取每个值,您必须先进行一些按位运算以掩盖所有不需要的值。例如。要读取位集的第二位,您需要:

  • 查找包含所需位的int(在这种情况下,它是第一个int)
  • 按位,并且该int为'2'(即value


    n


  • 推荐阅读