首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C / C ++强制位域顺序和对齐?

C / C ++强制位域顺序和对齐?
EN

Stack Overflow用户
提问于 2018-04-17 11:29:17
回答 2查看 0关注 0票数 0

我读过结构中位字段的顺序是平台特定的。如果我使用不同的编译器特定的打包选项,那么能否保证数据会在写入时按照正确的顺序存储吗?例如:

代码语言:javascript
复制
struct Message
{
  unsigned int version : 3;
  unsigned int type : 1;
  unsigned int id : 5;
  unsigned int data : 6;
} __attribute__ ((__packed__));

在具有GCC编译器的英特尔处理器上,这些字段在显示时放在内存中。Message.version是缓冲区中的前3位,并且接着是Message.type。

EN

回答 2

Stack Overflow用户

发布于 2018-04-17 20:08:16

不,它不会完全便携。结构的打包选项是扩展,并且它们本身不是完全可移植的。除此之外,C99§6.7.2.1第10段规定:“单元内位字段的分配顺序(从高阶到低阶或从低阶到高阶)是由实现定义的。”

例如,即使是单个编译器也可能会根据目标平台的字节顺序将字段放在不同的位置。

票数 0
EN

Stack Overflow用户

发布于 2018-04-17 20:43:43

位编辑器和编译器的位字段差别很大。

通过GCC,大端机器首先将位置放在大端,小端机器首先放置小端。

因此,如果你需要机器独立的二进制布局,你必须自己做。

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

https://stackoverflow.com/questions/-100003904

复制
相关文章

相似问题

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