结构体与联合体内存分配方式的不同
- 结构体:结构体的内存分配是按照其成员变量的顺序和类型依次分配内存,其占用内存大小是所有成员变量占用内存大小之和(考虑内存对齐)。各个成员变量在内存中是独立存储的,相互之间有明确的内存边界。
- 联合体:联合体所有成员变量共享同一块内存空间,其占用内存大小为其最大成员变量占用的内存大小。在某一时刻,只能使用联合体中的一个成员变量,对一个成员变量的赋值会覆盖其他成员变量的值。
结构体的定义与内存大小计算
// 定义结构体
struct Person {
char name[20]; // 20字节
int age; // 4字节(假设在32位或64位系统中,int通常为4字节)
double height; // 8字节
};
// 计算内存大小
// 由于内存对齐,name[20]后要对齐到8字节的倍数,即24字节
// age 4字节,加上后为28字节,也要对齐到8字节倍数,即32字节
// height 8字节,最终结构体占用内存大小为40字节
联合体的定义与内存大小计算
// 定义联合体
union Data {
int num; // 4字节
double value; // 8字节
char str[10]; // 10字节,实际按最大成员double的8字节对齐后为16字节
};
// 计算内存大小
// 联合体占用内存大小为最大成员变量(这里是double类型的value)的大小,即8字节(考虑对齐后为16字节)