//验证 1.内存对齐
/*
#include<iostream>
using namespace std;
class CBase
{
int a; //这里的内存对齐和struct对齐很像
char p; //前面定义了一个int型变量,
char q; //后面定义一个或两个char型的话,都是占用8字节
};
int main()
{
CBase class_1;
cout << sizeof(class_1) << endl; //输出8字节
return 0;
}
*/
//验证 2.空类占1字节
/*
#include<iostream>
using namespace std;
class A
{
};
int main()
{
A class_1;
cout << (void*)(&class_1) << endl;
cout << sizeof(class_1) << endl;
return 0;
}
/*
输出1字节
可以看到一个空类对象的大小1.
一个空类对象的大小是1,为什么不是0?
初学者肯定会很烦恼?类A明明是空类,它的大小应该为0,为什么编译器输出的结果为1呢?
这就是实例化的原因(空类同样被实例化),每个实例在内存中都有一个独一无二的地址,
为了达到这个目的,编译器往往会给一个空类隐含的加一个字节,
这样空类在实例化后在内存中得到了独一无二的地址,所以class_1的大小是1.
*/
//验证 3.成员函数不占用类对象的内存空间
/*
#include<iostream>
using namespace std;
class A
{
public:
void func1() {};
void func2() {};
void func3() {};
};
int main()
{
A class_1;
cout << sizeof(class_1) << endl;
return 0;
}
/*
虽然我们给类A添加了三个成员函数,但这里输出依然是1字节
说明成员函数不占用类对象的存储空间
*/
//验证 4.成员变量占用类对象的内存空间
/*
#include<iostream>
using namespace std;
class A
{
public:
void func1() {};
void func2() {};
void func3() {};
char a;
};
int main()
{
A class_1;
cout << (void*)(&class_1) << endl; //查看class_1的地址
cout << sizeof(class_1) << endl; //依然是占用1字节
class_1.a = 'c';
return 0;
}
/*
这里输出仍然是1字节
没有char成员变量的时候,编译器往往会给一个空类隐含的加一个字节
有了一个字节的char型成员变量的话,编译器就不会给类加字节了
但char还是占一个字节,不知道你能不能看明白
*/
//验证 5.int型成员变量占4字节
/*
#include<iostream>
using namespace std;
class A
{
public:
void func1() {};
void func2() {};
void func3() {};
int a;
};
int main()
{
A class_1;
cout << (void*)(&class_1) << endl; //查看class_1的地址
cout << sizeof(class_1) << endl; //这时就占用4字节
class_1.a = 12;
return 0;
}
*/