网站正在建设中 英语翻译,什么是网站开发,写作网站挣钱对比,银川建设网站结构体的内存
一.提出疑问 结构体占用的是一片连续的内存空间#xff0c;大小是由成员变量的类型决定的。但并不是计算所有成员变量的类型大小之和那么简单。
先举一个实例#xff1a;
struct student {int age; //4个字节int telephone; //4个字节
};
int main()
{struc…结构体的内存
一.提出疑问 结构体占用的是一片连续的内存空间大小是由成员变量的类型决定的。但并不是计算所有成员变量的类型大小之和那么简单。
先举一个实例
struct student {int age; //4个字节int telephone; //4个字节
};
int main()
{struct student s;// s的字节为8printf(%d, sizeof(s));return 0;
} 如图结构体student中含有2个int类型成员变量代码运行后可知结构体的大小为8个字节。 可真的是因为两个成员变量的大小之和嘛 我们再来一个实例
struct student {int age; //4个字节char name; //1个字节int telephone; //4个字节
};
int main()
{struct student s;// s的字节为12printf(%d, sizeof(s));return 0;
} 图中的三个成员变量分别为 intcharint类型三个成员变量的内存相加为9个字节 可为什么结构体内存会等于12呢 很明显结构体内存大小 不等于 所有成员变量的内存大小之和
二.计算结构体内存大小
在计算结构体内存大小时我们得先学会一个规则-----对齐规则。
1. 第一个成员在与结构体变量偏移量为0的地址处。 2. 其他成员变量要对齐到某个数字对齐数的整数倍的地址处。 对齐数 编译器默认的一个对齐数 与 该成员大小的较小值。 VS中默认的值为8 3. 结构体总大小为最大对齐数每个成员变量都有一个对齐数的整数倍。 4. 如果嵌套了结构体的情况嵌套的结构体对齐到自己的最大对齐数的整数倍处结构体的整 体大小就是所有最大对齐数含嵌套结构体的对齐数的整数倍。 理论已出现在来实践计算一下
struct student {int age; //1个字节char name; //1个字节int telephone; //4个字节
};
int main()
{struct student s;// s的字节为12printf(%d, sizeof(s));return 0;
}
例如以上代码借助图 解释 解释思路 首先根据规则第一个成员得在地址为0处然后成员的内存大小为4个字节所以占用4个空间地址0~3。第二个成员变量得开始遵循对齐规则由于char为1个字节所以无论地址为多少都是1的整数倍也占用一个空间地址4。最后第三个成员为int类型此时地址已经到达了4的位置而现在需要对齐int类型4个字节的整数倍则需要从8开始直到占有4个空间地址8~11。结束结构体总大小为最大对齐数成员变量的内存的整数倍而该结构体的最大的内存类型为int 4个字节而此时使用的内存0~11则是12满足条件。注若是不满足时则需要往后扩充直到满足为止。 创作不易路过的帅哥美女动动小手点点赞咯蟹蟹啦 若文章有问题请指出虚心接受批评