#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;
}
答案:4,8,8,12,24
静态变量是存放在全局数据区的,而sizeof计算栈中分配的大小,是不会计算在内的。
字节对齐是编译时决定的,一旦决定则不会再改变,因为即使有对齐的因素在,也不会出现一个结构在运行时尺寸发生变化的情况。
在本题中,A1的数据对齐是下面的情况:
|-------int--------| 4B
A2的数据对齐是下面的情况:
|--------int--------| 4B
|char|----|----|----| 1B+3B
A3的数据对齐是下面的情况:
|--------float-------| 4B
|char|----|----|----| 1B+3B
A4的数据对齐是下面的情况:
|-------float-------| 4B
|-------int---------| 4B
|char|----|----|----| 1B+3B
A5的数据对齐是下面的情况:
|---------------double----------------| 8B
|-------float-------|--------int--------| 4B+4B
|char|----|----|----|----|----|----|----| 1B+7B