首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >结构的大小和_Alignof值

结构的大小和_Alignof值
EN

Stack Overflow用户
提问于 2021-01-22 15:22:17
回答 1查看 114关注 0票数 1

在标准C中,下列哪一项是正确的?

(A) sizeof a结构等于:

  1. ,它的最后一个成员的相对地址加上sizeof ,它的最后一个成员。(我知道这不是真的。)

  1. ,它的最后一个成员的相对地址加上的对齐值(由_Alignof操作符获得),是最后一个成员。(这也不是真的,因为在某些情况下,sizeof类型可能大于其_Alignof值。见32位Windows GCC中的long doublesizeof是12,_Alignof是4)

  1. ,其上一个成员的相对地址加上的对齐值,结构本身为。(正如前面的语句所解释的那样,这也不可能是真的。)

结构itself.的

  1. ,其最后一个成员的相对地址加上最后成员的最大大小和的对齐值

  1. 还有别的东西

通过相对地址,我指的是其最后一个成员的起始字节与其第一个成员的起始字节(或结构本身)之间的距离,这可以用offsetof宏获得,比如:offsetof(struct st, last_member)

(B)结构的_Alignof值等于:

  1. 它的成员的_Alignof值具有最大的 _Alignof值.

  1. 还有别的东西

备注:

我说的不是特定环境上的特定实现,而是一个“标准C (C18)"-compliant实现应该如何表现为

  • _Alignof是标准的C操作符,alignof是它在stdalign.h头中定义的宏同义词。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-22 16:04:24

A的答案是“其他的东西”。

结构的大小必须至少是其上一个成员的偏移量加上该成员的大小加上足够的填充字节,使结构的大小成为其对齐要求的倍数(这等于其任何成员的最大对齐要求)。C实现可以在对齐要求的倍数中添加额外的填充字节,尽管我知道没有这样做。

B的答案是结构的对齐要求(其_Alignof值)等于其成员的最严格的对齐要求(其中最大的_Alignof值)。

特别要注意的是,C 2018 6.2.7 4写着“…”每个有效对齐值均为非负整数次方。“因此,如果任何对齐满足最严格的成员对齐要求,则它满足每个成员对齐要求,因此它就足够了。

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

https://stackoverflow.com/questions/65847914

复制
相关文章

相似问题

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