c++sizeof运算符是如何计算大小的

How does the c++ sizeof operator calculate size?

本文关键字:计算 运算符 何计算 c++sizeof      更新时间:2023-10-16

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

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

请向我解释一下班级人数是如何计算的。

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

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

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

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

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

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

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

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