结构体大小计算

简介: 目录一、前言 二、结构体的大小计算有以下几条规则:三、个人牛客网


一、前言


 在c语言中,要定义一个复杂对象比如说一个学生,用普通的变量是不可能定义完成的,所以这就有了我们的结构体,结构体就是是用来说明一个复杂对象的,所以结构体大小计算也成了重点。那我们应该怎么去计算结构体的大小呢,下面直接超级详细为你解答。

举例一个结构体:struct st

{

char name;

int age;

double money;

}s;


二、结构体的大小计算有以下几条规则:

1.结构体的第一个成员放在偏移量为0的位置如图:


微信图片_20220104224959.png


2.后面的变量放在对齐数整数倍上(对齐数一般是改成员变量大小如int为4),对齐数是编辑器默认对齐数与成员变量的大小取他们两个的最小值vs编辑器默认对齐数是8


微信图片_20220104225037.png


3,结构体最终大小是所有成员最大对齐数的整数倍16是8的整数倍,所以最终大小是16.


注意对于结构体套结构体中也是一样的算,结构体对齐数就是该结构体成员中最大对齐数,总结构体大小为所有成员(包括套的结构体)对齐数的(最小的)整数倍,如结构体所以成员最大对齐数是4,结构体算出来的大小是17,所以最终结果是20。(注意:最终结构体大小>=算出来的结构体大小)如:

struct aa

{ char c;

struct st s;//上面计算过的大小为20

int i;

}d;如图


微信图片_20220104225119.png


计算得到的的大小是32,所有成员最大对齐数是8,32是8的整数倍,故该结构体大小为32.


最后,#pragma pack()可以修改默认对齐数,如#pragma pack(2),修改默认对齐数为2。


image.png


解释:


微信图片_20220104225242.png


三、个人牛客网


以上就是计算结构体的全部内容了,觉得还可以的点个赞,觉得哪里不足的评论区留言。

微信图片_20220104225316.png


祝各位小伙伴们学有所成,早日拿到offer


目录
相关文章
|
Serverless
结构体-时间的计算
结构体-时间的计算
|
存储 C++
32.【C/C++ 结构体全类型 (详解)】(二)
32.【C/C++ 结构体全类型 (详解)】
66 0
|
存储 编译器 C++
32.【C/C++ 结构体全类型 (详解)】(一)
32.【C/C++ 结构体全类型 (详解)】
68 0
|
6月前
|
C++
C++程序中的结构体类型
C++程序中的结构体类型
56 1
|
6月前
函数与结构体
函数与结构体
35 3
|
编译器 Linux C++
计算结构体的大小
计算结构体的大小
71 0
|
6月前
|
C++
22结构体类型
22结构体类型
35 0
|
6月前
|
存储 编译器 Linux
自定义类型(结构体,结构体的存储大小如何计算)
结构:是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。结构体定义由关键字 struct和结构体名组成,结构体名可以根据需要自行定义。其中的struct是定义结构体类型的关键字(必须要写);Stu是当前结构体的字名(可以不写);大括号里面的age,name是成员变量。
55 0
|
存储 C语言
浅谈结构体类型
浅谈结构体类型
|
编译器 C++
计算结构体大小:内存对齐详解
计算结构体大小:内存对齐详解
202 0