C++面试题-C++空类的内存占用大小

C++面试题目

C++中的空类的内存占用大小。

这道题目源自面试过程中,让一个刚毕业的小伙谈谈对C++ Class的认识,小伙儿中间冒出一句:C++空类内存占用为一个字节。我当时就乐了,因为觉得这个问题太偏了,如果既然他说了也就追问下具体原因,也不能说的很清楚。把这个问题拿出来分享下。

解决方案

C++的空类是指这个类不带任何数据成员和方法,空类对象不使用任何空间,因为没有任何隶属对象的数据需要存储,但在实际的编译器实现中,会让C++中空类会占一个字节,这是为什么呢?

C++不允许一个对象(当然包括类对象)的大小为0,因为在分配对象内存时候,无法分配一个大小为0的内存的空间; 不同对象必须有独一无二的的地址,所以编译器会给空类隐含的增加一个字节让对象的实例能够相互区别。

空类做为基类的情况

虽然空类会被额外的被增加一个字节,但是这个字节并不会追加到子类中。

C++面试题-C++空类的内存占用大小

sizeof(D)=4

空类作为数据成员的情况

C++面试题-C++空类的内存占用大小

在大多数编译器中sizeof(HoldsAnInt) =8,虽然Empty类的大小虽然为1,然而由于内存对齐的原因,会把这个类对象扩展为8个字节。


分享到:


相關文章: