MST

星途 面试题库

面试题:C++中为何空类的sizeof值通常不为0,其对性能有何潜在影响?

在C++中,空类的sizeof值一般为1。请解释为什么会这样,并且阐述这种情况在实际编程中对性能可能产生哪些潜在影响,例如在内存分配、对象数组存储等场景下。
37.5万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

空类sizeof值为1的原因

在C++中,空类被实例化时,它必须在内存中有独一无二的地址。如果sizeof(空类)为0,那么两个不同的空类对象将无法在内存中区分,因为它们的地址将相同。所以,编译器会给空类分配1个字节的空间,使得每个空类对象都有独一无二的内存地址。

对性能的潜在影响

  1. 内存分配
    • 单个对象:当创建单个空类对象时,由于仅需1字节,内存分配开销相对较小。但相比于真正不需要占用空间的情况(假设允许sizeof为0),还是多占用了1字节,在内存极度紧张的系统中,可能会有轻微的浪费。
    • 多个对象:如果创建大量空类对象,如在循环中创建,每次分配1字节空间,总体可能会消耗较多内存,对内存分配器也是一种压力,影响内存分配性能。
  2. 对象数组存储
    • 假设创建空类对象数组,每个对象占用1字节,对于一个有n个元素的空类对象数组,就会占用n字节空间。如果这些对象原本无需占用空间,这n字节就是额外开销。在存储大量数据时,会增加内存使用量,影响缓存命中率。因为缓存是以块为单位进行数据预取的,如果数组占用空间过大,会导致缓存中其他有用数据被替换出去,从而增加内存访问时间,降低程序性能。