> bitfield是C概念还是C?
>它只能在结构中使用吗?我们可以使用它们的其他地方有哪些?
> AFAIK,bitfields是特殊的结构变量,只占用指定的no.比特.它在节省内存方面很有用.我对么?
>它只能在结构中使用吗?我们可以使用它们的其他地方有哪些?
> 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位对齐中.