位字段存储器

时间:2015-04-25 16:32:55

标签: c++ memory bit-fields

如果我宣布这样的话

struct S{
  unsigned int bit:4;
}

它是如何运作的?

  1. 我在内存中分配了2个字节(结构的大小(从这里得到这个大小http://en.cppreference.com/w/cpp/language/bit_field)但只使用了4位,并且浪费了该结构中的其他内存。
  2. 我只分配了4位,仅此而已。
  3. 我对此非常困惑,无法在任何地方找到任何相关信息。

3 个答案:

答案 0 :(得分:3)

写作时

S s;

你分配sizeof (S)字节,在你的情况下似乎是2 您只使用该位空间的4位这一事实不会改变大小。

答案 1 :(得分:0)

您无法分配4位。最低内存分配单元是一个字节8位。

但是没有理由使用unsigned int这会浪费更多内存,请使用unsigned char

答案 2 :(得分:0)

这将分配4个字节的内存,仅使用4位内存。 即使不使用位字段,也需要使用位字段来占用它们所声明类型的所有空间。

如果您想更有效地使用内存,可以这样做:

Y

它只会分配一个字节。

sizeof(unsigned int)通常是4个字节,因此sizeof(S)至少为4个字节。