中一个class类对象占用多少内字节

作者: 今晚买四不像计算  发布:2019-11-10

C++中四个class类对象占用多少内字节(7个例证,很驾驭卡塔 尔(英语:State of Qatar),class字节

二个空的class在内部存款和储蓄器中稍稍字节?即便进入三个成员函数后是多大?这几个成员函数存款和储蓄在内部存款和储蓄器中怎么着部分?

 

    叁个Class对象须求占用多大的内部存储器空间。最高雅的结论是: 
*非静态成员变量总合。 
*丰硕编写翻译器为了CPU计算,作出的数量对齐处理。 
*增进为了援助虚函数,发生的额外担负。

介绍完了理论知识后,再看看再找三个例证看看(注:一下兼有结果都是在VC6.0 开采景况中搜查缉获的结论卡塔 尔(英语:State of Qatar) 

    一、空类的Size

 1 class Car
 2 {
 3 };
 4  
 5 void main()
 6 {
 7     int size = 0;
 8     Car objCar;
 9     size = sizeof(objCar);
10     printf("%s %d /r", "Class Car Size:", size);
11 }

输出结果:Class Car Size:1

那是干什么呢?我想对于那几个主题材料,不止是刚出道不久的支付新手,固然有过几年以上C++开拓经历的开垦人士也不至于能说清楚那几个。 
编写翻译器在实践Car objCar;那行代码后须求,作出叁个Class Car的Object。并且这几个Object之处还是独步临时的,于是编写翻译器就能给空类创立一个带有的七个字节的上空。

 

    二、独有成员变量的Size

 1 class Car
 2 {
 3 private:
 4     int nLength;
 5     int nWidth;
 6 };
 7  
 8 void main()
 9 {
10     int size = 0;
11     Car objCar;
12     size = sizeof(objCar);
13     printf("%s %d /r", "Class Car Size:", size);
14 }

输出结果:Class Car Size:8

本条结果不菲开垦职员都知晓。在叁13人系统中,整型变量占4个字节。这里Class Car中带有三个整型类型的分子变量,所以Class Size是8。

 

    三、有静态成员变量的Size**

 1 class Car
 2 {
 3 private:
 4     int nLength;
 5     int nWidth;
 6     static int sHigh;
 7 };
 8  
 9 void main()
10 {
11     int size = 0;
12     Car objCar;
13     size = sizeof(objCar);
14     printf("%s %d /r", "Class Car Size:", size);
15 }

输出结果:Class Car Size:8

我们本次在Class Car中增多了二个静态成员变量,可是Class Size仍为8个字节。那无独有偶切合了,结论中的第一条:非静态成员变量总合。

 

    四、有字符型变量(char卡塔 尔(阿拉伯语:قطر‎的Size**

 1 class Car
 2 {
 3 private:
 4     char chLogo
 5     int nLength;
 6     int nWidth;
 7     static int sHigh;
 8 };
 9  
10 void main()
11 {
12     int size = 0;
13     Car objCar;
14     size = sizeof(objCar);
15     printf("%s %d /r", "Class Car Size:", size);
16 }

输出结果:Class Car Size:12

在类中又插入了一个字符型变量,结果Class Size产生了12。那个正是编写翻译器额外加多3个字符变量,做多少对齐管理,为了是增加CPU的测算速度。编写翻译器额外增多的事物大家是爱莫能助见到的。那也顺应了定论中的第二条:加上编译器为了CPU总括,作出的数码对齐管理。 
既是,大家这么定义类成员数量编写翻译器会附加的增添空。那么,大家何不在定义类的时候就考虑到数量对齐的主题材料,能够多定义出3个字符类型变量作为预先流出变量,既可以满意数码对齐的渴求,也给本身的主次加多了某个可扩展的空间。

 

    五、唯有成员函数的Size

 1 class Car
 2 {
 3 public:
 4     Car(){};
 5     ~Car(){};
 6 public:
 7     void Fun(){};
 8 };
 9  
10 void main()
11 {
12     int size = 0;
13     Car objCar;
14     size = sizeof(objCar);
15     printf("%s %d /r", "Class Car Size:", size);
16 }

输出结果:Class Car Size:1

哦,那是怎么回事儿呢?再做三个施行看看。

 

    六、有成员函数和成员变量的Size

 1 class Car
 2 {
 3 public:
 4     Car(){};
 5     ~Car(){};
 6 public:
 7     void Fun(){};
 8 private:
 9     int nLength;
10     int nWidth;
11 };
12  
13 void main()
14 {
15     int size = 0;
16     Car objCar;
17     size = sizeof(objCar);
18     printf("%s %d /r", "Class Car Size:", size);
19 }

输出结果:Class Car Size:8

此番应该很精通的了。函数是不占用类空间的。第二个例证中的Size为1个字节,便是编译器为类创制一个暗含的一个字节的长空

 

    七、有虚函数(virtual卡塔尔国的Size

 1 class Car
 2 {
 3 public:
 4     Car(){};
 5     virtual ~Car(){};
 6 public:
 7     void Fun(){};
 8 };
 9  
10 void main()
11 {
12     int size = 0;
13     Car objCar;
14     size = sizeof(objCar);
15     printf("%s %d /r", "Class Car Size:", size);
16 }

输出结果:Class Car Size:4

本次,让析构函数为虚函数,看见了Class Size为4。那多亏指向Virtual Table的指针vptr的Size。那正好符合了,结论中的第三条:加上为了协理虚函数,发生的额外负责。

 

贰个空的class在内部存款和储蓄器中只怕字节?要是投入一个成员函数后是多大?那...

本文由今晚买四不像发布于今晚买四不像计算,转载请注明出处:中一个class类对象占用多少内字节

关键词:

上一篇:Vector基本操作
下一篇:没有了