struct 结构体 所占字节数的计算 您所在的位置:网站首页 三个字节怎么定义的 struct 结构体 所占字节数的计算

struct 结构体 所占字节数的计算

2024-07-01 15:23| 来源: 网络整理| 查看: 265

定义结构体类型,只能说明该类型的组成情况,并没有分配内存空间。只有当定义属于结构体类型的变量时,系统才会分配空间给该变量。

结构体中不允许对结构体本身的递归定义,但是可以使用指针指向本类型

结构体变量可以在定义时进行初始化赋值

对结构体变量初始化时,应该将各成员所赋初值依照结构体类型说明中成员的顺序依次放在一对大括号中,不允许跳过前面的成员给后面的成员赋值,但可以只给前面若干成员赋初值,后面未赋初值的成员中,数值型和字符型的数据,系统自动赋值零。

结构体的空间计算

struct 的空间计算遵循的2个原则: 1:整体空间是占用空间最大的成员(的类型)所占字节数的整数倍,但是在32位Linix + gcc环境下,若最大成员类型所占字节数超过4,如double是8,则整体空间是4的倍数即可。 2:数据对齐原则。内存按结构体成员的先后顺序排列,当排到该成员变量时,其前面已摆放的空间大小必须是该成员类型大小的整数倍,如果不够则补齐,依次向后类推。但在Linux + gcc环境下,某成员类型所占字节数超过4,如double是8,则前面已摆放的空间大小是4的整数倍即可,不够则补齐

看个例子方便理解:

struct Demo1 { char a; double b; int c; char d; }; cout char c1; // 偏移为0 ,占用字节1 Demo1 d; // 根据规则2,前面占用空间需要是子结构体重占用成员最大的倍数,因此需要是4的倍数,d在偏移量为4的位置,占用字节为8.4+8=12 char c2; // 偏移为12,占用字节1。12 + 1 = 13.根据规则1需要是4的倍数,16最接近13,因此占用的总字节数为16 }; cout char a; // 偏移为0开始,占用字节1 s1 s; // 偏移为4开始,(根据规则2,前面所占内容需要是4的倍数),占用字节12。总子节数 = 12 + 4 = 16 }; struct s3 { s2 s; // 偏移为0开始,占用字节16 char c; // 偏移16开始,占用字节1。16 + 1 = 17。根据规则1,需要是整数倍,需要是int即4的整数倍,所以总子节为20 }; cout


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有