c - 位域的类型是否影响结构对齐

标签 c bit

我有以下结构:

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/

相关文章:

c - 在 c 中跳过空格但不换行而不中断并继续

c - 在 C 中将变量与字符串进行比较的正确格式是什么?

Python字节数组到位数组

c# - 减少位顺序逻辑

java - 将输入处理为比特流

c - 如何将用户输入存储两次?

c - 将套接字绑定(bind)到网络接口(interface)时出错

c - C 中 free() 函数的问题

python - 执行计算以显示 Python 具有 53 位精度

sql 查询 - true => true, false => true 或 false