首页 未命名正文

linux编程_C语言之结构体以及结构体对齐接见

云返利网 未命名 2020-05-26 09:06:38 14 0

1:简朴明白,结构体就是数组的进一步生长,数据的优点和缺陷在于数据内里是元素类型必须相同,然则结构体没有这个要求,结构体内里元素的类型可以相同也可以差别。

2:结构体的界说:
struct student
{
    int age;
    char name[20];
}s1;

上面这种方式是结构体界说的同时界说变量,结构体的界说有两部门组成
struct studen:结构体的类型
s1:类型为struct student的结构体变量,固然还可以用struct studet s2;l来界说变量s2
注重结构体内里的元素不能再建立的时刻直接赋值,而是要通过外部接见来对结构体举行填充

3:结构体内里变量的接见
    结构体内里的元素接见方式有两种,一种是  .    一种是->,但其实质上都是通过指针来接见的。
C语言划定用结构体的变量来接见结构体的时刻是用  .  用结构体变量的指针来接见结构体的时刻用->

4:结构体的对齐接见
    首先要知道一点,我们使用 . 的方式来接见结构体时是差别思量结构体内存对齐问题的,这部门编译器会帮我们处置,然则若是我们想通过指针方式来接见结构体内里的各元素的时刻就需要思量内存对齐的问题。结构体内存对齐接见一个主要原因是硬件自己的物理限制,使用对齐接见可以提高接见的效率。然则内存对齐也会带来内存空间虚耗的问题,以是内存对齐接见实际上是通过牺牲内存空间来换取的速率。

5:结构体对齐的规则和运算
    编译器自己可以设置内存对齐的规则,然则一下几点规则需要记着
(1)32位编译器,一样平常米、默认是4字节对齐
(2)结构体整体自己必须安置在4字节对齐处,也就是结构体的首地址必须是4整数的倍数(若是编译设置为n字节对齐接见,则首地址就是n的整数倍(n = 1 2 4 8 16 ...))
(3)结构体中每个元素自己必须对齐存放

(4)整个结构体的所占的内存空间必须是4的整数倍(同样若是是n字节对齐就是n的整数倍)

struct mystruct1
{                        //1字节对齐        //4字节对齐
int a;          // 4                //  4
char b;          //1                  //  2
 short c;        //2                //  2
}mystr1; 
 
struct mystruct2
{                  //1字节对齐          //4字节对齐
char a;          // 1          //  4  (1+3)3字节填充
int    b;          //4                  //  4
 short c;          //2            //  4  (2 +2)2字节填充
}mystr2;

【关于云返利网】

云返利网是阿里云、腾讯云、华为云产品推广返利平台,在各个品牌云产品官网优惠活动之外,云返利网还提供返利。您可以无门槛获得阿里云、华为云、腾讯云所有产品返利,在官网下单后就可以领取,无论是自己用、公司用还是帮客户采购,您个人都可以获得返利。云返利网的目标是让返利更多、更快、更简单!详情咨询13121395187(微信同号)