1、问题描述
求解下面程序结果
#includeusing namespace std;class A1 {public: int a; static int b; A1(); ~A1();};class A2 {public: int a; char c; A2(); ~A2();};class A3 {public: float a; char c; A3(); ~A3();};class A4 {public: float a; int b; char c; A4(); ~A4();};class A5 {public: double d; float a; int b; char c; A5(); ~A5();};int main(){ cout << sizeof(A1) << endl; cout << sizeof(A2) << endl; cout << sizeof(A3) << endl; cout << sizeof(A4) << endl; cout << sizeof(A5) << endl; return 0;}
2、在linux 下QT及 g++编译后执行结果
$ ./tt4881220
在XP下Qt编译后执行结果
4881224
3、析
1)sizeof 只计算栈中分配的大小, 不计算全局数据区中分配的大小。静态变量存放在全局数据区。
2)类类型占用内存大小是所有成员变量大小之和且满足数据对齐规则。
3)linux 下与 windows 下执行结果不同,推测是 linux下以4字节为整数倍进行对齐,xp 下是以最大占用内存的变量为整数倍进行对齐。