首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >位场的类型会影响结构对齐吗?

位场的类型会影响结构对齐吗?
EN

Stack Overflow用户
提问于 2013-10-09 14:38:39
回答 4查看 518关注 0票数 3

我有以下结构:

代码语言:javascript
复制
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;
}

结构成员对齐是否取决于位字段成员的类型?

EN

回答 4

Stack Overflow用户

发布于 2013-10-09 15:00:49

代码语言:javascript
复制
#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同意我的机器。你可以做一些联合,找出确切的排列方式。

票数 2
EN

Stack Overflow用户

发布于 2013-10-09 15:09:16

代码语言:javascript
复制
Does the structure member alignment depend on type of a bitfield members?  

是。

检查byte offsetbit offset

但是,包含位字段的聚合的对齐规则因有效的对齐模式而不同。

这些规则是在此描述

票数 2
EN

Stack Overflow用户

发布于 2013-10-09 15:25:48

  • 位字段作为整体的对齐是未指定的行为,是否允许位字段分配未对齐是实现定义的行为。
  • 位字段的位顺序是实现定义的。
  • 由于上面的两个注释,编译器可以自由地在位字段中的任何位置以实现定义的方式添加填充位和填充字节。
  • 在位字段中是否实际允许使用uint64_t是由实现定义的。所以这段代码可能根本不起作用。

如果不阅读特定编译器的文档,就不可能知道这段代码将做什么,更不用说它将如何受到对齐的影响了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19275106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档