结构名只能表示一个结构形式,编译系统并不会对它分配内存空间。只有当结构体变量被说明的时候,才会对该变量分配内存空间。结构体占用的内存空间为每个成员占用的字节数之后和,还要考虑内存对齐。 内存对齐:取结构体成员中占用最大的数据类型,每次分配内存按最大数来分配,最终占用的字节数必然是最大数的倍数。 - struct A{
- int a; //占用4个字节
- float b; //占用4个字节
- char c; //占用1个字节
- }
复制代码 每次按4个字节分配,这个结构体占用12个字节。
- struct A{
- int a; //占用4个字节
- float b; //占用4个字节
- char c; //占用1个字节
- double d; //占用8个字节
- }
复制代码 每次按8个字节分配,a分配8个字节,占用4个字节,由b去填充;c分配8个字节,占用1个字节,剩余7个字节;d占用8个字节,无法占用c剩下的,继续分配8个字节,总共是24个字节。有时候因为各个成员的先后顺序不一样,会影响占用的字节总数。
|