【问题标题】:Doubts about structure padding对结构填充的怀疑
【发布时间】:2012-05-14 10:59:41
【问题描述】:

一旦添加额外的字节来引用这些额外的字节在执行时会发生什么。这些额外的字节是空的还是其中会包含什么数据?

对此有任何帮助。谢谢!!!

【问题讨论】:

  • 什么是“空”字节?你的意思是像你的内存芯片上的一个洞?

标签: c structure


【解决方案1】:

ISO 9899:2011 6.2.6.1/6

当一个值存储在结构或联合类型的对象中时, 包括在成员对象中,对象表示的字节 对应于任何填充字节的值采用未指定的值。

这是未指定的行为,这意味着编译器可以将任何值放在那里,包括垃圾,只要它对所有结构都一致。编译器不需要向用户记录它如何处理填充字节。

【讨论】:

    【解决方案2】:

    它可以是任何东西。如果您使用calloc 分配了结构,那么它们最初将为零。但是后续操作可能会导致向它们写入垃圾。

    【讨论】:

      【解决方案3】:

      在结构中进行填充以对齐其成员。这是由编译器出于优化目的完成的,以便访问更快。 您不必担心结构中的间隙。继续并引用/取消引用您的结构的成员。 一篇很好的文章是http://www.geeksforgeeks.org/archives/9705

      【讨论】:

      • 对齐不一定是优化功能。某些硬件需要对某些大于一的类型进行某种对齐。
      猜你喜欢
      • 2015-03-11
      • 1970-01-01
      • 2019-04-14
      • 2018-10-18
      • 1970-01-01
      • 1970-01-01
      • 2018-08-14
      • 1970-01-01
      • 2023-03-09
      相关资源
      最近更新 更多