MST

星途 面试题库

面试题:C++ 空类大小及内存布局基础

在C++中,一个空类的大小是多少?为什么会是这个大小?如果空类中有一个虚函数,其大小又会如何变化,内存布局是怎样的?
39.6万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 空类大小
    • 空类的大小通常是1字节。
    • 原因:C++标准要求每个对象都必须有独一无二的地址。如果空类大小为0,那么创建多个空类对象时,它们在内存中的地址就无法区分,所以编译器会给空类分配1字节空间,以确保每个空类对象都有独一无二的地址。
  2. 空类中有一个虚函数时
    • 大小变化:此时类的大小通常为4字节(在32位系统下)或8字节(在64位系统下)。
    • 内存布局:空类中有一个虚函数时,类对象中会包含一个虚函数表指针(vptr)。在32位系统中,指针大小为4字节;在64位系统中,指针大小为8字节。这个虚函数表指针指向一个虚函数表(vtable),虚函数表中存储着虚函数的地址。所以类的大小就变成了虚函数表指针的大小。