MST

星途 面试题库

面试题:C++ 类对象内存布局相关

假设有如下C++类定义:class A { int a; char b; static int c; public: void func() {} }; 请描述该类对象在内存中的布局情况,并说明静态成员变量和成员函数在内存中的存储位置与普通成员的区别。
24.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 类对象在内存中的布局
    • 对于类A,其对象在内存中包含非静态成员变量。这里非静态成员变量有int a(通常占4字节,具体取决于系统和编译器设置)和char b(占1字节)。由于内存对齐的原因,A类对象大小至少为8字节(假设int占4字节,char占1字节,为了对齐到4字节边界,b后会填充3字节)。
  2. 静态成员变量
    • 静态成员变量(如static int c)不包含在类对象的内存布局中。它们存储在全局数据区(静态存储区),与类的实例无关。所有类对象共享同一个静态成员变量的实例。
  3. 成员函数
    • 成员函数(如void func())同样不包含在类对象的内存布局中。成员函数代码存储在代码区(也叫文本段)。普通成员函数可以访问类的非静态成员变量,通过对象的指针(this指针)来区分不同对象的成员变量。而静态成员函数只能访问静态成员变量,因为它不依赖于任何类对象实例,没有this指针。