注意点:
1.空类的大小为1
2.内存对齐(提高效率)
结构体内存对齐规则
1. 第一个成员在与结构体偏移量为0的地址处。
2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 注意:对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。( VS中默认的对齐数为8,gcc中的对齐数为4 )
3. 结构体总大小为:最大对齐数(所有变量类型最大者与默认对齐参数取最小)的整数倍。
4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是 所有最大对齐数(含嵌套结构体的对齐数)的整数倍。
#include<iostream> using namespace std; class A1 { public: void f1() {} private: int _a; }; class A2 { public: void f2() {} }; class A3 {}; int main() { cout << sizeof(A1) << endl; cout << sizeof(A2) << endl; cout << sizeof(A3) << endl; return 0; }
练习题
class A4 { public: A4() {} ~A4() {} private: static int _a; char _b; int array[10]; int _c; double _d; class A3 { int arr[10]; double _e; }; }; class A5 { public: A5() {} ~A5() {} private: static int _a; char _b; int array[10]; double _d; int _c; class A3 { int arr[10]; double _e; }; };
请问这两个类(A4和A5)一样大吗?
注意点:1.静态数据成员不计算在类的对象大小内,静态变量在全局区(静态区)
2.类没有实例化之前,不分配内存空间来存储
答案:类的空间大小 =成员变量 所占空间+浪费空间(内存对齐)
A4 (大小计算过程) A5(大小计算过程)
![]()