首先,我们要知道,一个类是没有大小的,应该说成是类的实例的大小。
class A;
A a;
其中,sizeof(A) == sizeof(a);
一个对象的大小 大于等于所有的非静态成员大小的总和。
这是为什么呢?
对于有虚函数的类,需要有一个方法为它的实体提供类型信息和虚函数入口,一般的方法是建立一个虚表(虚函数表)。在实例化时,在对象中增加一个指向虚函数的指针,许多编译器都是这样规定的
编译器优化,因为对于大多数CPU来说,CPU字长的整数倍操作起来更快,因此对于这些成员加起来如果不够这个整数倍,有可能编译器会插入多余的内容凑足这个整数倍,此外,有时候相邻的成员之间也有可能因为这个目的被插入空白,这个叫做内存对齐。
sizeof类得到的结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。后者依赖于不同的编译器实现,C++标准对此不做任何保证。
一个类中成员函数、虚函数、静态数据成员都是不占用类的存储空间的。
因为空类也进行了实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器一般会给一个空类隐含的加一个字节,这样就可以达到空类在实例化后得到了独一无二的地址的目的。
本文发布于:2024-02-01 08:57:05,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170674902735459.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |