我有以下结构:
struct bf_struct1
{
uint64_t bf1 : 1;
uint64_t bf2 : 6;
uint64_t bf3 : 2;
uint64_t bf4 : 55;
}
struct bf_struct2
{
uint8_t bf1 : 1;
uint8_t bf2 : 6;
uint8_t bf3 : 2;
uint64_t bf4 : 55;
}结构成员对齐是否取决于位字段成员的类型?
发布于 2013-10-09 15:00:49
#include <stdio.h>
#define uint64_t unsigned long long
#define uint8_t unsigned char
struct bf_struct1
{
uint64_t bf1 : 1;
uint64_t bf2 : 6;
uint64_t bf3 : 2;
uint64_t bf4 : 55;
};
struct bf_struct2
{
uint8_t bf1 : 1;
uint8_t bf2 : 6;
uint8_t bf3 : 2;
uint64_t bf4 : 55;
};
int main(){
printf("%lu ", sizeof(struct bf_struct1));
printf("%lu ", sizeof(struct bf_struct2));
return 0;
}结果是816,所以我会说答案是肯定的。编译器依赖,即使gcc和clang同意我的机器。你可以做一些联合,找出确切的排列方式。
发布于 2013-10-09 15:09:16
Does the structure member alignment depend on type of a bitfield members? 是。
检查byte offset和bit offset。
但是,包含位字段的聚合的对齐规则因有效的对齐模式而不同。

这些规则是在此描述。
发布于 2013-10-09 15:25:48
如果不阅读特定编译器的文档,就不可能知道这段代码将做什么,更不用说它将如何受到对齐的影响了。
https://stackoverflow.com/questions/19275106
复制相似问题