面试题答案
一键面试空类sizeof值为1的原因
在C++中,空类被实例化时,它必须在内存中有独一无二的地址。如果sizeof(空类)为0,那么两个不同的空类对象将无法在内存中区分,因为它们的地址将相同。所以,编译器会给空类分配1个字节的空间,使得每个空类对象都有独一无二的内存地址。
对性能的潜在影响
- 内存分配:
- 单个对象:当创建单个空类对象时,由于仅需1字节,内存分配开销相对较小。但相比于真正不需要占用空间的情况(假设允许sizeof为0),还是多占用了1字节,在内存极度紧张的系统中,可能会有轻微的浪费。
- 多个对象:如果创建大量空类对象,如在循环中创建,每次分配1字节空间,总体可能会消耗较多内存,对内存分配器也是一种压力,影响内存分配性能。
- 对象数组存储:
- 假设创建空类对象数组,每个对象占用1字节,对于一个有n个元素的空类对象数组,就会占用n字节空间。如果这些对象原本无需占用空间,这n字节就是额外开销。在存储大量数据时,会增加内存使用量,影响缓存命中率。因为缓存是以块为单位进行数据预取的,如果数组占用空间过大,会导致缓存中其他有用数据被替换出去,从而增加内存访问时间,降低程序性能。