结构体大小计算
【摘要】 目录一、前言 二、结构体的大小计算有以下几条规则:三、个人牛客网一、前言 在c语言中,要定义一个复杂对象比如说一个学生,用普通的变量是不可能定义完成的,所以这就有了我们的结构体,结构体就是是用来说明一个复杂对象的,所以结构体大小计算也成了重点。那我们应该怎么去计算结构体的大小呢,下面直接超级详细为你解答。举例一个结构体:struct st{char name;int age;do...
目录
一、前言
在c语言中,要定义一个复杂对象比如说一个学生,用普通的变量是不可能定义完成的,所以这就有了我们的结构体,结构体就是是用来说明一个复杂对象的,所以结构体大小计算也成了重点。那我们应该怎么去计算结构体的大小呢,下面直接超级详细为你解答。
举例一个结构体:struct st
{
char name;
int age;
double money;
}s;
二、结构体的大小计算有以下几条规则:
1.结构体的第一个成员放在偏移量为0的位置如图:
2.后面的变量放在对齐数整数倍上(对齐数一般是改成员变量大小如int为4),对齐数是编辑器默认对齐数与成员变量的大小取他们两个的最小值(vs编辑器默认对齐数是8)
3,结构体最终大小是所有成员最大对齐数的整数倍16是8的整数倍,所以最终大小是16.
注意对于结构体套结构体中也是一样的算,结构体对齐数就是该结构体成员中最大对齐数,总结构体大小为所有成员(包括套的结构体)对齐数的(最小的)整数倍,如结构体所以成员最大对齐数是4,结构体算出来的大小是17,所以最终结果是20。(注意:最终结构体大小>=算出来的结构体大小)如:
struct aa
{ char c;
struct st s;//上面计算过的大小为20
int i;
}d;如图
计算得到的的大小是32,所有成员最大对齐数是8,32是8的整数倍,故该结构体大小为32.
最后,#pragma pack()可以修改默认对齐数,如#pragma pack(2),修改默认对齐数为2。
解释:
以上就是计算结构体的全部内容了,觉得还可以的点个赞,觉得哪里不足的评论区留言。
祝各位小伙伴们学有所成,早日拿到offer
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)