gpt4 book ai didi

c - 关于C位域的问题

转载 作者:太空狗 更新时间:2023-10-29 17:05:53 25 4
gpt4 key购买 nike

  • bitfield是C概念还是C++?

  • 它只能在一个结构中使用吗?我们还可以在哪些地方使用它们?

  • 据我所知,位域是特殊的结构变量,只占用指定编号的内存。位。它在节省内存方面很有用,没有别的。 我说的对吗?

我编写了一个小程序来了解位域的用法 - 但是,我认为它没有按预期工作。我预计以下结构的大小为 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;
}

输出:

sizeof struct s = 12 bytes 

最佳答案

因为ac不是连续的,所以它们各自预留了一个完整的int值的内存空间。如果将 ac 一起移动,结构的大小将变为 8 个字节。

此外,您是在告诉编译器您希望a 只占用1 ,而不是1 个字节。因此,尽管 ac 彼此相邻只占用 3 位(仍然在一个字节下),ac 的组合c 在 32 位机器的内存中仍然是字对齐的,因此除了 int b 之外还占用了整整 4 个字节。

同样,你会发现

struct s{
unsigned int b;
short s1;
short s2;
};

占用8个字节,而

struct s{
short s1;
unsigned int b;
short s2;
};

占用 12 个字节,因为在后一种情况下,两条短裤各自位于自己的 32 位对齐位置。

关于c - 关于C位域的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2071252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com