gpt4 book ai didi

c - C位字段如何合并?

转载 作者:太空宇宙 更新时间:2023-11-04 00:35:42 25 4
gpt4 key购买 nike

我已经很久没有用 C 编写代码了。对于下面的代码:

struct {
int a :1;
int b :1;
int c :1;
} test1;

对于test1,由于每个字段只需要1位,所以1个字节(8位)对于test1应该足够了。

但是 sizeof(test1) 返回 4 而 GCC 返回 4。为什么?

加1

struct {
char a :4;
short b :3;
} test2;

对于test2,由于char是8位> 4 + 3,所以我认为1个字节对test2来说足够了。但是 sizeof(test2) 使用 GCC 仍然返回 4。

sizeof(test2) 怎么会返回 4?一个char + 一个short = 最多3个字节。

最佳答案

您将这些字段声明为 int 的一部分,因此您所做的与

struct {
int x;
} test1;

它和 int 一样大(通常是 4,但取决于架构)。

尝试:

struct {
unsigned char a :1;
unsigned char b :1;
unsigned char c :1;
}

第二个 struct 可能需要处理对齐,这又取决于架构。这与位域无关;你可以复制:

struct {
char a;
short b;
}

编译器正在添加填充,使其等同于

struct {
char a;
char invisible;
short b;
}

这在某些架构中可能是必要的,无论是为了速度还是因为架构不允许未对齐的访问。

关于c - C位字段如何合并?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38409154/

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