14

我创建了一个只有 2 个公共函数(构造函数和析构函数)的类 X,并且使用sizeof运算符,类大小将变为 1。

当我在上面的类声明中添加一个类型的私有数据成员时char,大小仍然是1。最后我给它添加了一个整数类型作为类数据成员,现在大小是8字节。

请向我解释如何计算班级人数。

4

2 回答 2

24

首先,要认识到非虚函数对类的大小没有影响。

任何类的实例的大小至少为 1 字节,即使该类为空,这样不同的对象会有不同的地址。

添加 achar可确保不同的对象具有不同的地址,因此编译器不会人为地在大小上添加 1。那么大小sizeof(char)= 1。

然后添加一个int,它(可能)在您的平台上添加 4 个字节。然后编译器决定填充该类,以便出于性能/CPU 要求的原因将其对齐,并添加 3 个空字节,因此大小现在为 1 + 3 + 4 = 8。它可能会在int成员之前添加填充,以便它将在 4 字节边界上对齐,但除非您的 CPU 需要,否则不需要这样做。

您可以在 Wikipedia 页面上阅读有关填充的信息。

于 2013-02-22T20:59:11.793 回答
8

有许多因素决定了 C++ 中类的对象的大小。这些因素是:

  1. 所有非静态数据成员的大小
  2. 数据成员的顺序
  3. 字节对齐或字节填充
  4. 其直接基类的大小
  5. 虚函数的存在(使用虚函数的动态多态性)。
  6. 正在使用的编译器
  7. 继承方式(虚继承)

你可以在这里找到更多http://www.cprogramming.com/tutorial/size_of_class_object.html

于 2013-02-22T21:02:48.160 回答