类的大小——sizeof 的研究(1)

发布时间:2024-12-02 05:48

社会调查的样本大小和选取方法影响研究的代表性。 #生活知识# #社会生活# #社会调查研究#

先看一个空的类占多少空间?

    注意到我这里显示声明了构造跟析构,但是sizeof(Base)的结果是1.

     因为一个空类也要实例化,所谓类的实例化就是在内存中分配一块地址,每个实例在内存中都有独一无二的地址。同样空类也会被实例化,所以编译器会给空类隐含的添加一个字节,这样空类实例化之后就有了独一无二的地址了。所以空类的sizeof为1。

   而析构函数,跟构造函数这些成员函数,是跟sizeof无关的,也不难理解因为我们的sizeof是针对实例,而普通成员函数,是针对类体的,一个类的成员函数,多个实例也共用相同的函数指针,所以自然不能归为实例的大小,这在我的另一篇博文有提到。

   接着看下面一段代码

结果自然是

12

20

Base类里的int  a;char *p;占8个字节。

而虚析构函数virtual ~Base();的指针占4子字节。

其他成员函数不归入sizeof统计。

Derive类首先要具有Base类的部分,也就是占12字节。

int  d;char *p;占8字节

static int st;不归入sizeof统计

所以一共是20字节。

在考虑在Derive里加一个成员char c;

这个时候,结果就变成了

12

24

一个char c;增加了4字节,说明类的大小也遵守类似class字节对齐,的补齐规则。

具体的可以看我那篇《5分钟搞定字节对齐》

至此,我们可以归纳以下几个原则:

1.类的大小为类的非静态成员数据的类型大小之和,也就是说静态成员数据不作考虑。

2.普通成员函数与sizeof无关。

3.虚函数由于要维护在虚函数表,所以要占据一个指针大小,也就是4字节。

4.类的总大小也遵守类似class字节对齐的,调整规则。

网址:类的大小——sizeof 的研究(1) https://www.yuejiaxmz.com/news/view/343485

相关内容

c语言中的数组大小,该如何表示 : sizeof(array)/sizeof(array[0])
(Node*)malloc(sizeof(Node))的理解
中学政治“1+1”高效课堂教学模式研究
硕士研究生心理压力的质性研究
纳米技术在肉类保鲜中的应用研究进展
【征稿】JCR 1区(IF=8.7)| 同济大学核医学研究所
农村小学生心理辅导的研究课题阶段性总结1
研究发现:炒菜1小时=吸半包烟?
小米智能家居的技术与应用研究
健康饮食的研究报告

随便看看