我有以下结构:
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;
}
结构成员对齐是否取决于位域成员的类型?
最佳答案
#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;
}
结果为 8 16。所以我会说答案是肯定的。编译器依赖甚至 虽然 gcc 和 clang 同意我的机器。你可以建立一些 union 和 弄清楚到底是什么对齐方式。
关于c - 位域的类型是否影响结构对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19275106/