3

答案应该很简单,但我想确定一下。

sizeof()递归的吗?例如,

struct foo
{
   DWORD a;
   DWORD b;
};

struct bar
{
   DWORD c;
   foo d;
};

是否会sizeof(bar)包含 的大小foo,返回完整的 12 个字节(假设 DWORD 为 4 个字节)?

4

3 回答 3

6

是的...sizeof给出类型中直接包含的所有成员的总数,包括struct/class数据成员、非虚拟基类、一些实现定义的跟踪虚拟基的链接/计数器、虚拟调度表指针、有助于对齐数据成员的填充对于 CPU 安全或高效的访问,理论上任何其他的实现都可能感觉像放在那里!(例如,用于运行时调试/错误检测、垃圾收集的非标准支持......)

当然,它不包括指向或引用对象的大小,但包括那些指针和引用的大小。

于 2012-06-05T11:26:13.673 回答
6

是的,sizeof 运算符为您提供结构的大小,包括其所有成员。

但请注意,编译器可能会添加自己的填充,因此实际大小可能/可能不等于结构成员大小的总和。

于 2012-06-05T11:25:33.317 回答
3

是的。摘自 ISO/IEC 9899:TC3:

当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾随填充。

(强调我的)

于 2012-06-05T11:28:29.780 回答