MST

星途 面试题库

面试题:C++中虚函数实现带来的内存开销体现在哪方面

在C++中,虚函数的实现会带来一定的内存开销,请简要阐述这些开销主要体现在哪些方面,并说明原因。
22.7万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试
  1. 虚函数表(VTable)开销
    • 原因:每个包含虚函数的类都有一个虚函数表。虚函数表是一个存储类的虚函数地址的数组。这意味着即使类的实例对象没有使用虚函数,这个虚函数表也会占据内存空间。例如,假设有一个基类Base包含虚函数,多个派生类Derived1Derived2等继承自Base,每个类都会有自己的虚函数表(若虚函数重写情况不同)。这些虚函数表会占用一定的内存,特别是在程序中有大量包含虚函数的类时,内存开销会比较明显。
  2. 虚函数表指针(VPtr)开销
    • 原因:每个包含虚函数的类的对象都有一个虚函数表指针。这个指针指向该类对应的虚函数表,用于在运行时动态确定要调用的虚函数。对于每个对象而言,都需要额外的空间来存储这个指针。以32位系统为例,指针通常占用4字节,64位系统则占用8字节。这使得每个对象的内存大小增加,尤其是当对象本身很小时,虚函数表指针带来的额外开销占比相对较大。例如,一个简单的只包含一个int成员变量(在32位系统占4字节)且有虚函数的类,对象实际占用内存会因为虚函数表指针而变为8字节(假设32位系统)。