我创建了一个只有2个公共函数(构造函数和析构函数)的类X,并且使用sizeof
运算符,类大小将变为1。
当我将类型char
的私有数据成员添加到上面的类声明时,大小仍为1。
最后,我将一个整数类型添加为类数据成员,现在大小为8个字节。
请向我解释如何计算班级人数。
答案 0 :(得分:24)
首先,要意识到非虚拟的函数对类的大小没有影响。
任何类的实例的大小至少为1个字节,即使该类为空,因此不同的对象将具有不同的地址。
添加char
可确保不同的对象具有不同的地址,因此编译器不会人为地添加一个地址。然后大小为sizeof(char)
= 1。
然后添加int
,其中(可能)在您的平台上添加4个字节。然后,编译器决定填充类,以便根据性能/ CPU要求进行对齐,并添加3个空字节,以便现在大小为1 + 3 + 4 = 8.它可能会在{{1}之前添加填充成员,以便它将在4字节边界上对齐,但除非您的CPU需要它,否则不需要它。
您可以在the Wikipedia page上阅读有关填充的内容。
答案 1 :(得分:8)
有许多因素决定了C ++中对象的大小。这些因素是:
您可以在http://www.cprogramming.com/tutorial/size_of_class_object.html
找到更多信息