#include <iostream>
using namespace std;
union A { // 共用体变量共用内存, 以最长的类型为准
int a[5];
char b;
double c;
};
struct B{
char a; // 偏移为0,占用1个字节
double b; // 偏移为1,字节补齐加7个字节, 占用8个字节
int c; // 偏移为16,占用4个字节
};
union C{
long i; // 32位机器下long类型为4个字节, 64位机器下long为8个字节
int k[5];
char c;
};
struct D {
int cat;
C cow;
double dog;
};
int main() {
cout << sizeof(A) << endl;
cout << sizeof(B) << endl;
cout << sizeof(C) << endl;
cout << sizeof(D) << endl;
return 0;
}
共用体内存分配法则:以最长的数据类型对齐,共用体的占用字节数是最长的数据类型的整数倍。
结构体分配法则:
- 每个变量偏移量是该变量字节的整数倍,偏移量不够字节补齐。
- 结构体整体占用字节数是最长数据类型的整数倍。