gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 08:38:04 25 4
gpt4 key购买 nike

我有以下结构:

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/

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