c ++ sizeof运算符如何计算大小?

Ish*_*ita 14 c++ class sizeof

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

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

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

Set*_*gie 24

首先,要意识到非虚拟的函数对类的大小没有影响.

任何类的实例的大小至少为1个字节,即使该类为空,因此不同的对象将具有不同的地址.

添加char确保不同的对象将具有不同的地址,因此编译器不会人为地添加一个大小.那么大小sizeof(char)= 1.

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

您可以在维基百科页面上阅读有关填充的内容.

  • @zch我并不是故意暗示,因为它取决于编译器.但是我会更改添加的顺序并添加注释,如果它使它看起来不那么混乱. (4认同)
  • 我希望它是`c --- iiii`而不是`ciiii ---`,正如这个答案所暗示的那样. (2认同)

psu*_*psu 8

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

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

您可以在http://www.cprogramming.com/tutorial/size_of_class_object.html找到更多信息