空类的大小是多少?原因是什么?

阅读: 评论:0

空类的大小是多少?原因是什么?

空类的大小是多少?原因是什么?

首先,我们要知道,一个类是没有大小的,应该说成是类的实例的大小。

class A;
A a;

其中,sizeof(A) == sizeof(a);
一个对象的大小 大于等于所有的非静态成员大小的总和。
这是为什么呢?

1.指向虚函数表的指针

对于有虚函数的类,需要有一个方法为它的实体提供类型信息和虚函数入口,一般的方法是建立一个虚表(虚函数表)。在实例化时,在对象中增加一个指向虚函数的指针,许多编译器都是这样规定的

2. 内存对齐

编译器优化,因为对于大多数CPU来说,CPU字长的整数倍操作起来更快,因此对于这些成员加起来如果不够这个整数倍,有可能编译器会插入多余的内容凑足这个整数倍,此外,有时候相邻的成员之间也有可能因为这个目的被插入空白,这个叫做内存对齐。

sizeof类得到的结果等于各非静态数据成员(不包括成员函数)的总和加上编译器额外增加的字节。后者依赖于不同的编译器实现,C++标准对此不做任何保证。

一个类中成员函数、虚函数、静态数据成员都是不占用类的存储空间的。

空类大小是1不是0的原因?

因为空类也进行了实例化,每个实例在内存中都有一个独一无二的地址,为了达到这个目的,编译器一般会给一个空类隐含的加一个字节,这样就可以达到空类在实例化后得到了独一无二的地址的目的。

类的大小与什么有关,与什么无关?

  • 类的大小是非静态成员数据的类型大小之和;
  • 为了优化存取效率,进行字节对齐;
  • 由编译器额外加入的成员变量的大小,用来支持语言的某些特性;
  • 与类中的构造函数、析构函数、拷贝构造函数、赋值运算符重载、取地址运算、const取地址运算无关。

本文发布于:2024-02-01 08:57:05,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170674902735459.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:大小   原因
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23