假设我有这样的代码:
#include <stdio.h>
#include <stdint.h>
int main(int argc, char *argv[]) {
typedef struct{
uint16_t x : 9;
uint8_t y : 7;
} z;
printf("sizeof(z) = %lu\n",sizeof(z));
}
我在 Mac 上得到了不同的 clang 结果 (2),有人告诉我在 Windows 上它返回了 (3)。不确定我是否理解得很好,但我发现第一个编译器将结构压缩为 9+7 = 16 位,而另一个编译器使用 16 位 uint16_t 和 8 位 uint8_t。你能建议一下吗?
最佳答案
不确定我是否理解得很好,但我发现第一个编译器将结构压缩为 9+7 = 16 位,而另一个编译器使用 16 位 uint16_t 和 8 位 uint8_t。你能建议一下吗?
关于位域,首先要记住的是 K&R 第 2 句中的这句话:
(6.9 Bit-fields) "Almost everything about fields is implementation-dependent."
它包括填充、对齐和位字节序。
关于c - sizeof(struct) 对于不同的编译器是不同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32327544/