首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位场存储器

位场存储器
EN

Stack Overflow用户
提问于 2015-04-25 16:32:54
回答 3查看 176关注 0票数 0

如果我申报这样的东西

代码语言:javascript
复制
struct S{
  unsigned int bit:4;
}

它是怎么工作的?

  1. 我在内存中分配了2个字节(结构的大小(从这里field获得这个大小),但是只使用其中的4位,而该结构中的其他内存被浪费了。
  2. 我只分配了4位,仅此而已。

我对此很困惑,在任何地方都找不到这方面的任何信息。

EN

回答 3

Stack Overflow用户

发布于 2015-04-25 16:35:01

当你写

代码语言:javascript
复制
S s;

您分配sizeof (S)字节,这在您的情况下似乎是2。

您只使用该空间的4位这一事实并不会改变大小。

票数 3
EN

Stack Overflow用户

发布于 2015-04-25 16:36:08

您不能分配4位。最低的内存分配单元是一个字节,8位。

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

票数 0
EN

Stack Overflow用户

发布于 2015-04-25 16:38:47

这将分配4字节的内存,并且只使用其中的4位。位字段需要占用它们声明为的类型的所有空间,即使没有全部使用。

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

代码语言:javascript
复制
struct S{
    unsigned char bit : 4;
};

它只分配一个字节。

另外,sizeof(无符号int)通常是4个字节,所以sizeof(S)至少是4个字节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29867822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档