【问题标题】:How exactly structure packing and padding work?结构包装和填充究竟是如何工作的?
【发布时间】:2021-12-26 15:32:21
【问题描述】:

structs 在 C++ 中究竟是如何打包和填充的?该标准没有说明它应该如何完成(据我所知),编译器可以做任何他们想做的事情。但是有教程展示了如何使用已知规则有效地打包structs(例如,每个变量都需要位于其大小的倍数的地址上,如果前一个变量的结尾不是多个,则将插入填充),使用这些规则,我们可以在源代码中手动打包structs。最后是什么?我们知道structs 将以何种方式封装在现代机器(例如 PC)上,或者这只是一种想法,可能是正确的,但认为它是理所当然的并不好?

【问题讨论】:

  • 它是特定于编译器的。这些教程可能假设您使用的是特定的编译器。
  • 基本类型的大小也因实现而异,固定大小的算术类型是可选的,因此严格手工打包是不可移植的。

标签: c++ struct padding packing


【解决方案1】:

结构体在 C++ 中是如何打包和填充的?

简答:以这种方式满足对齐要求。

该标准没有说明它应该如何完成(据我所知),编译器可以为所欲为。

在对齐要求的范围内,这确实是正确的。这也是对您问题的回答。

【讨论】:

  • 所以如果我理解正确(只是为了确定)这样的结构:struct A{int a; double b; char c; }; 不能保证像这样填充:struct A{int a; char padding[4] double b; char c; char padding[7] }; 或以任何可预测的方式?
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 2011-06-26
  • 2021-08-15
  • 2012-06-08
  • 2011-10-11
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多