答案应该很简单,但我想确定一下。
是sizeof()
递归的吗?例如,
struct foo
{
DWORD a;
DWORD b;
};
struct bar
{
DWORD c;
foo d;
};
是否会sizeof(bar)
包含 的大小foo
,返回完整的 12 个字节(假设 DWORD 为 4 个字节)?
是的...sizeof
给出类型中直接包含的所有成员的总数,包括struct
/class
数据成员、非虚拟基类、一些实现定义的跟踪虚拟基的链接/计数器、虚拟调度表指针、有助于对齐数据成员的填充对于 CPU 安全或高效的访问,理论上任何其他的实现都可能感觉像放在那里!(例如,用于运行时调试/错误检测、垃圾收集的非标准支持......)
当然,它不包括指向或引用对象的大小,但包括那些指针和引用的大小。
是的,sizeof 运算符为您提供结构的大小,包括其所有成员。
但请注意,编译器可能会添加自己的填充,因此实际大小可能/可能不等于结构成员大小的总和。
是的。摘自 ISO/IEC 9899:TC3:
当应用于具有结构或联合类型的操作数时,结果是此类对象中的总字节数,包括内部和尾随填充。
(强调我的)