存储更多布尔值的最有效方法

时间:2011-01-02 19:18:05

标签: c performance memory-management

我需要在c中的结构中准确存储四个布尔值。是的我可以使用四个整数或将它们放入一个数组但我想做得更好一些。我在考虑像“0000”这样的int,其中每个数字代表布尔值,但是当编辑时我不能只编辑一个数字,对吗?这看起来并不完美......

感谢您的任何想法

5 个答案:

答案 0 :(得分:17)

您可以使用位域结构:

struct foo {
  unsigned boolean1 : 1;
  unsigned boolean2 : 1;
  unsigned boolean3 : 1;
  unsigned boolean4 : 1;
};

然后,您可以分别轻松编辑每个布尔值,例如:

struct foo example;
example.boolean1 = 1;
example.boolean2 = 0;

答案 1 :(得分:2)

使用类似“0000”的int使用位字段调用,并且在实践中经常进行。是的,您可以使用bit shifting修改单个值。就个人而言,我宁愿使用int到bitfield结构,因为你可以扩展到32个值(如果你当然使用32位int),而不必修改结构。

答案 2 :(得分:1)

如果您要存储数百万个,请将其作为打包位。

如果您需要每秒访问数百万次,请将其作为整数(或短片或字符)。

如果两者都没有,那就没关系了。

如果两者兼而有之,那么你可能需要进行一些严肃的性能调整。

答案 3 :(得分:0)

可以使用

完成

http://en.wikipedia.org/wiki/Stdbool.h

bool a = true;  // Could also be 'bool a = 1;'

答案 4 :(得分:-1)

struct _eMyBool
{
    int m_iOne : 1;
    int m_iTwo : 1;
    int m_iThree : 1;
    int m_iFour : 1;
} eMyBool;

然而,甚至不认为这是使用布尔值的最有效方式。

因为为了处理这个而生成的附加汇编代码有价格!

For example read this MSDN article

AFAI记得我认为获得的内存应该至少有7的比率,因为在访问一位对齐成员时,用于位移的附加代码的占用空间非常重要。

This is the wikipedia article about data alignement.