64 C++对象模型探索。类对象占用空间问题分析

0.没有任何成员变量的空类,实际上占用空间为1字节。

这是因为当你的使用代码实例化一个类的时候,tea对象就有了空间,&tea是有地址的,那么你这个地址至少要占用1个字节才合理。

Teacher tea;

就像我们买房子,你的房子是有地址的,哪怕这个地址只有一个平方,就像一个对象,C++给分配的大小就是1个字节。

1.成员变量包含在每个对象中,是占用 对象 字节的。


2.成员函数虽然也写在类的定义中,但是成员函数不占用 对象 字节数。成员函数每个类只诞生一个(跟着类走),不管你用这个类产生了多少个对象

class Teacher1 {

};
class Teacher2 {
public:
	void func1() {

	}
	void func2() {

	}
	void func3() {

	}
};

class Teacher3 {
public:
	int age;
	void func1() {

	}
	void func2() {

	}
	void func3() {

	}
};


int main()
{
    std::cout << "Hello World aaa!\n";
	//1.空类的大小是1
	Teacher1 tea1;
	cout << sizeof(Teacher1) << endl;//结果是1
	cout << sizeof(tea1) << endl;//结果是1

	//2.类的成员函数不占用  类对象  的内存空间
	Teacher2 tea2;
	cout << sizeof(Teacher2)<

4.静态变量 和 静态函数 不占用 对象的空间,是跟着类走的

5 虚函数不占用类对象的空间,但是为了指向虚函数表,会生成一个指针,指向这个 "虚函数表",这个指针是放在类对象空间中的。

这里涉及到两个概念,虚函数表,和指向虚函数表的指针。

5.1  当类中有一个虚函数的时候,这个类会产生一个指向虚函数的指针。注意是 (这个类)。 也就是说,当类中有10个不同虚函数的时候,会产生10个指向不同虚函数的指针。

 5.2  类本身指向这10个虚函数的指针要有地方存放,于是在 类中有了一个虚函数表。注意,这个虚函数表 也是在类中的。虚函数表的vitual table,简称vtbl

5.3  类对象中,存放的是指向这个 虚函数表的指针。简称 vptr。

总结为:

64 C++对象模型探索。类对象占用空间问题分析_第1张图片

你可能感兴趣的:(c++)