1、问题描述
求解下面程序结果
#include <iostream> using 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++编译后执行结果
$ ./tt 4 8 8 12 20
在XP下Qt编译后执行结果
4 8 8 12 24
3、析
1)sizeof 只计算栈中分配的大小, 不计算全局数据区中分配的大小。静态变量存放在全局数据区。
2)类类型占用内存大小是所有成员变量大小之和且满足数据对齐规则。
3)linux 下与 windows 下执行结果不同,推测是 linux下以4字节为整数倍进行对齐,xp 下是以最大占用内存的变量为整数倍进行对齐。