类的对象中只保存成员变量,而成员函数保存在公共的代码段
计算类的大小
class A
{
//有成员函数和成员变量
void func(){}
int a;
};
class B
{
//只有成员函数
void func(){};
};
class C
{
//空类
};
sizeof( A ) = 4
sizeof( B ) = 1;
sizeof( C ) = 1;
一个类的大小,实际就是该类中”成员变量”之和,当然也要进行内存对齐,注意空类的大小,空类比较特殊,编译器给了空类一个字节来唯一标识这个类。
内存对齐
内存对齐规则:
- 第一个成员在与结构体偏移量为0的地址处。
- 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。
注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。
VS中默认的对齐数为8,gcc中的对齐数为4 - 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
- 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是
所有最大对齐数(含嵌套结构体的对齐数)的整数倍
Linux下gcc编译器:
举个例子:
class A
{
char a;
int b;
char c;
};
根据内存对齐的规则,
- a在偏移量为0的地址处,对齐数为min(si