具有单个元素的struct的大小

use*_*672 18 c c++

特定

struct S {
  SomeType single_element_in_the_struct;
};
Run Code Online (Sandbox Code Playgroud)

这总是如此

sizeof(struct S) == sizeof(SomeType)
Run Code Online (Sandbox Code Playgroud)

或者它可能依赖于实现?

Jam*_*lis 14

通常会出现这种情况,但不能保证.

任何结构可能在结构的末尾都有未命名的填充字节,但这些通常用于对齐目的,如果您只有一个元素,则不需要考虑.

  • 如果你只有一个元素,那么_which不是一个问题_实际上处理结构中的单个元素仍然可能因对齐/性能原因而被填充.通常示例是32位系统上的`char数组[6]`,可以填充2个额外字节作为4字节(32位)的整数倍. (3认同)

Sil*_*rom 13

由于结构填充,它不必相等.

C99标准中的第6.7.2.1节规定"结构对象中可能存在未命名的填充,但不是在其开头".

这被称为结构填充.可以添加填充以确保结构在存储器中正确对齐.如果更改其成员的顺序,结构的exakt大小可能会更改.

  • 但是如果结构体只有一个成员,填充会起作用吗?这是 OP 的问题,到目前为止我还没有在 n1256 中找到任何确定的内容。例如,对于每个 gcc,包含单个 3 元素 char 数组的结构的大小为 3;没有填充。在数组后面添加一个int,数组的大小为8,所以元素之间有一个字节的填充。 (3认同)