gpt4 book ai didi

c - 不同编译器的 sizeof(struct) 不同

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

假设我有这样的代码:

#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 位,但另一个使用 uint16_t 的 16 位和 uint8_t 的 8 位。你能建议一下吗?

关于位域,首先要记住的是来自 K&R,第 2 篇的这句话:

(6.9 Bit-fields) "Almost everything about fields is implementation-dependent."

它包括填充、对齐和位字节顺序。

关于c - 不同编译器的 sizeof(struct) 不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28580344/

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