MST

星途 面试题库

面试题:C++中class与struct内存布局差异之继承场景

有如下代码:class BaseClass { int a; char b; }; struct DerivedStruct : BaseClass { short c; }; 同样在32位系统默认对齐方式下,DerivedStruct实例的内存布局是怎样的,占用多少字节?如果将DerivedStruct改为class DerivedClass : BaseClass { short c; }; 内存布局和占用字节数会有变化吗?请详细分析。
31.9万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. DerivedStruct内存布局及字节数分析
    • 在32位系统默认对齐方式下,int类型占4字节,char类型占1字节,short类型占2字节。
    • 对于BaseClassint a占4字节,char b占1字节,由于默认对齐(通常是4字节对齐),b之后需要填充3字节以满足4字节对齐,所以BaseClass占用8字节。
    • DerivedStruct继承自BaseClass,再加上short c占2字节,c之后需要填充2字节以满足4字节对齐。
    • 因此,DerivedStruct实例占用的字节数为8 + 2 + 2 = 12字节。
    • 内存布局如下:
      • 前4字节存放a
      • 接着1字节存放b,后面3字节填充。
      • 再接着2字节存放c,后面2字节填充。
  2. DerivedClass内存布局及字节数分析
    • 当把DerivedStruct改为class DerivedClass : BaseClass { short c; };时,在C++中,classstruct在继承和成员访问控制等方面有区别,但在内存布局上,对于这种简单继承结构且在相同对齐方式下,内存布局和占用字节数没有变化。
    • 同样,BaseClass部分占用8字节,DerivedClass新增的short c及后续填充字节与DerivedStruct情况相同,DerivedClass实例也占用12字节。

所以,无论是DerivedStruct还是DerivedClass,在32位系统默认对齐方式下,内存布局相同,占用字节数均为12字节。