关于C位域的问题
发布时间:2020-12-16 04:54:46 所属栏目:百科 来源:网络整理
导读:bitfield是C概念还是C? 它只能在结构中使用吗?我们可以使用它们的其他地方有哪些? AFAIK,bitfields是特殊的结构变量,只占用指定的no.比特.它在节省内存方面很有用.我对么? 我编写了一个小程序来理解位域的使用 – 但是,我认为它没有按预期工作.我希望下
> bitfield是C概念还是C?
>它只能在结构中使用吗?我们可以使用它们的其他地方有哪些? > AFAIK,bitfields是特殊的结构变量,只占用指定的no.比特.它在节省内存方面很有用.我对么? 我编写了一个小程序来理解位域的使用 – 但是,我认为它没有按预期工作.我希望下面结构的大小为1 4 2 = 7个字节(考虑到unsigned int的大小在我的机器上是4个字节),但令我惊讶的是,结果是12个字节(4 4 4).谁能让我知道为什么? #include <stdio.h> struct s{ unsigned int a:1; unsigned int b; unsigned int c:2; }; int main() { printf("sizeof struct s = %d bytes n",sizeof(struct s)); return 0; } OUTPUT: sizeof struct s = 12 bytes 解决方法
因为a和c不是连续的,所以它们每个都保留一个完整的int的内存空间.如果将a和c移动到一起,则struct的大小将变为8个字节.
此外,您告诉编译器您希望仅占用1位而不是1个字节.因此,即使a和c彼此相邻也应该只占3位(仍然在单个字节下),a和c的组合仍然在32位机器的内存中成为字对齐,因此占用了整整4个字节除了int b. 同样,你会发现 struct s{ unsigned int b; short s1; short s2; }; 占用8个字节,而 struct s{ short s1; unsigned int b; short s2; }; 占用12个字节,因为在后一种情况下,两个短路各自位于它们自己的32位对齐中. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |