当前位置: 首页 > news >正文

门户网站是以什么为主宁波网络营销推广公司

门户网站是以什么为主,宁波网络营销推广公司,angular适合 做 网站吗,湖南网站建设联系电话目录 一、结构体内存对齐规则: 1.1范例 1.2结构体内存对齐规则 1.3自定义默认对齐数 二、位段 2.1什么是位段 2.2位段的内存分配 2.3位段的不足 三、枚举和联合体 3.1枚举 3.1.1枚举类型的定义 3.1.2枚举类型的使用 3.2联合体 3.2.1联合体的定义 3.…

目录

一、结构体内存对齐规则:

1.1范例

1.2结构体内存对齐规则

1.3自定义默认对齐数

二、位段 

2.1什么是位段

2.2位段的内存分配

2.3位段的不足

三、枚举和联合体

3.1枚举

3.1.1枚举类型的定义

3.1.2枚举类型的使用

3.2联合体

3.2.1联合体的定义

3.2.2联合体的特点


一、结构体内存对齐规则:

1.1范例

我们来看一下结构体所占用的内存大小:

命名 A 和 B 的结构体成员都一样, 但是为什么他们占用的内存空间不一样呢?下面我们来介绍一下结构体内存的对齐规则。

1.2结构体内存对齐规则

首先我们要知道什么是对齐数,对齐数 = 编译器中默认的对齐数该成员类型变量的大小(单位是byte)中的较小值。其中,VS默认的对齐数是8,Linux无默认对齐数,对齐数是其本身。

而在结构体中存放的数据,其地址并不是严格连续存放的,而是存放在其对齐数的整数倍

编译器为结构体开创的大小,是最大对齐数的整数倍。

struct stu
{char name[20];int age;double grades;
};
int main()
{printf("%d\n", sizeof(struct stu));//结果为32return 0;
}

1.3自定义默认对齐数

之前在我们写三子棋时创建的 .h 文件中,我们就见过 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数。

#pragma pack(8)//设置默认对齐数为8
struct A
{int a;short b;int c;char d;
};#pragma pack()//取消设置的默认对齐数,还原为默认
#pragma pack(1)//设置默认对齐数为1struct B
{int a;short b;char c;int d;
};

当我们把结构体 A 和 B 的默认对齐数都设置为1时,我们可以再次计算一下他们的大小

可以看出,他们的内存竟然都变成了11,这也说明了我们设置的默认对齐数起作用了。 

二、位段 

2.1什么是位段

很多朋友可能是第一次听说过位段,它是什么?为什么能和结构体扯上关系?

接下来我们对比一下位段类型的结构体和正常的结构体:

不难看出来,位段类型是在我们正常定义的变量基础上加上了 :数字 。其实这代表了我们定义的变量所需要占用的存储空间,单位是 bit

我们分别来计算上面两种结构体的大小,我们可以得出,使用位段的结构体只需要8字节,不使用位段的结构体却要16个字节。所以,位段是用来节省空间的。

2.2位段的内存分配

我们来看个例子了解在VS中位段的内存分配。

#include<stdio.h>struct _Record_Struct
{unsigned char Env_Alarm_ID : 4;unsigned char Para1 : 2;unsigned char state;unsigned char avail : 1;
};int main()
{sizeof(struct _Record_Struct);return 0;
}

我们在VS中运行这个程序也可以得到结果是3(byte),和我们图中的一样。

位段虽然能节省空间,但当两个位段类型超过 1byte 时,还是会浪费第一个位段类型剩余的几个 bit ,开辟下一个字节空间来存放第二个位段类型 

我们再来看个例子来更直观的感受每一个 bit 位是怎么分配的。

struct S
{char a : 3;char b : 4;char c : 5;char d : 4;
};
int main()
{struct S s = { 0 };s.a = 10;s.b = 12;s.c = 3;s.d = 4;return 0;
}

接下来我们通过内存看一下他们存放的数据,每四个bit位在内存中对应一个十六进制数字:

事实证明我们的理解是对的!

2.3位段的不足

我们上述只是讲解了VS中位段空间的分配,但是这仅仅是在VS中......

1. int 位段被当成有符号数还是无符号数是不确定的。
2. 位段中最大位的数目不能确定(16位机器最大16,32位机器最大32,写成27,在16位机器会出问题。)。
3. 位段中的成员在内存中从左向右分配,还是从右向左分配标准尚未定义。
4. 当一个结构包含两个位段,第二个位段成员比较大,无法容纳于第一个位段剩余的位时,是舍弃剩余的位还是利用,这是不确定的。

三、枚举和联合体

接下来我们介绍两种和结构体类似的自定义类型:枚举和联合体

3.1枚举

3.1.1枚举类型的定义

我们先来看一下枚举的语法:

enum Day//星期
{Mon,Tues,Wed,Thur,Fri,Sat,Sun
};

enum + 命名,枚举中的类型用 , 隔开。

这些可能取值都是有值的,默认从0开始,一次递增1,当然在定义的时候也可以赋初值。赋初值后定义的类型取值从初值开始递增1,如:

enum Day
{Mon,//0Tues = 2,//2Wed,//3Thur,//4//......Fri,Sat,Sun
};

3.1.2枚举类型的使用

枚举类型能怎么使用呢? 其实它的使用在我们写一些小应用时用到的概率大一点:

enum Day//星期
{Mon = 1,Tues,Wed,Thur,Fri,Sat,Sun
};int main()
{int input = 0;scanf("%d", &input);switch (input){case Mon:case Tues:case Wed:case Thur:case Fri:printf("今天是工作日\n"); break;case Sat:case Sun:printf("今天可以休息一下啦!\n"); break;}return 0;
}

当我们用枚举常量代替 case 情况的取值时,我们的代码是不是变得清晰易懂?

枚举的优点:
1. 增加代码的可读性和可维护性
2. 和#define定义的标识符比较枚举有类型检查,更加严谨。
3. 防止了命名污染(封装)
4. 便于调试
5. 使用方便,一次可以定义多个常量

3.2联合体

3.2.1联合体的定义

联合也是一种特殊的自定义类型,这种类型定义的变量也包含一系列的成员,特征是这些成员公用同一块空间(所以联合也叫共用体)。
比如:

//联合类型的声明
union Un
{char c;int i;
};
//联合变量的定义
union Un un;
//计算连个变量的大小
printf("%d\n", sizeof(un));

 union + 命名,成员之间用 ; 相隔。

3.2.2联合体的特点

联合的成员是共用同一块内存空间的,这样一个联合变量的大小,至少是最大成员的大小(因为联合至少得有能力保存最大的那个成员)。

联合体占用空间也遵循结构体对齐规则。


文章转载自:
http://dinncoceilometer.stkw.cn
http://dinncopsellism.stkw.cn
http://dinncononappearance.stkw.cn
http://dinncocanaliform.stkw.cn
http://dinncopaiute.stkw.cn
http://dinncooliguria.stkw.cn
http://dinncolinguist.stkw.cn
http://dinncoga.stkw.cn
http://dinncomacrolide.stkw.cn
http://dinncobradycardia.stkw.cn
http://dinncomustang.stkw.cn
http://dinncoedmonton.stkw.cn
http://dinncounpracticed.stkw.cn
http://dinncoabbreviationist.stkw.cn
http://dinncoadducent.stkw.cn
http://dinncocalloused.stkw.cn
http://dinncoferity.stkw.cn
http://dinncooligocene.stkw.cn
http://dinnconullipore.stkw.cn
http://dinncodrainer.stkw.cn
http://dinncofeminine.stkw.cn
http://dinncopinitol.stkw.cn
http://dinncocaliphate.stkw.cn
http://dinncoaqueous.stkw.cn
http://dinncobaker.stkw.cn
http://dinncogandhiite.stkw.cn
http://dinncominitrack.stkw.cn
http://dinncorecommission.stkw.cn
http://dinncosonograph.stkw.cn
http://dinncofoulard.stkw.cn
http://dinncosambuca.stkw.cn
http://dinncofranking.stkw.cn
http://dinncopetticoat.stkw.cn
http://dinncoaedes.stkw.cn
http://dinncoeverywhither.stkw.cn
http://dinncocaressingly.stkw.cn
http://dinncoseasickness.stkw.cn
http://dinncoresinoid.stkw.cn
http://dinnconeutralism.stkw.cn
http://dinncorenovate.stkw.cn
http://dinncovulgarity.stkw.cn
http://dinncographite.stkw.cn
http://dinncoperissad.stkw.cn
http://dinncopostliminium.stkw.cn
http://dinncostrengthen.stkw.cn
http://dinncooarweed.stkw.cn
http://dinncononbusiness.stkw.cn
http://dinncoalderney.stkw.cn
http://dinncounderreact.stkw.cn
http://dinncologistics.stkw.cn
http://dinncopierrot.stkw.cn
http://dinncomagnetics.stkw.cn
http://dinncojoltily.stkw.cn
http://dinncoiaba.stkw.cn
http://dinncoclamant.stkw.cn
http://dinncoemt.stkw.cn
http://dinncobiopoesis.stkw.cn
http://dinncoobole.stkw.cn
http://dinncoesoteric.stkw.cn
http://dinncovotary.stkw.cn
http://dinncopolony.stkw.cn
http://dinncobenignant.stkw.cn
http://dinncoexecrate.stkw.cn
http://dinncowob.stkw.cn
http://dinncoentame.stkw.cn
http://dinncogoad.stkw.cn
http://dinncoms.stkw.cn
http://dinnconephralgia.stkw.cn
http://dinncopalaeolith.stkw.cn
http://dinncounaired.stkw.cn
http://dinncokebab.stkw.cn
http://dinncodisfranchise.stkw.cn
http://dinncoinstantaneous.stkw.cn
http://dinncoplanetologist.stkw.cn
http://dinncobabirusa.stkw.cn
http://dinncofrisson.stkw.cn
http://dinncobands.stkw.cn
http://dinncoballroom.stkw.cn
http://dinncoallantois.stkw.cn
http://dinncosubdolous.stkw.cn
http://dinncosearcher.stkw.cn
http://dinncovenomed.stkw.cn
http://dinncoarteriosclerotic.stkw.cn
http://dinncochincapin.stkw.cn
http://dinncokurus.stkw.cn
http://dinncowallace.stkw.cn
http://dinncoaftercrop.stkw.cn
http://dinncodrury.stkw.cn
http://dinncofulgurous.stkw.cn
http://dinncobridegroom.stkw.cn
http://dinncopreconscious.stkw.cn
http://dinncoamniote.stkw.cn
http://dinncorhabdome.stkw.cn
http://dinncojargonaut.stkw.cn
http://dinncotreck.stkw.cn
http://dinncospall.stkw.cn
http://dinncoglabellum.stkw.cn
http://dinncobirotation.stkw.cn
http://dinncokegling.stkw.cn
http://dinncogeomorphology.stkw.cn
http://www.dinnco.com/news/160619.html

相关文章:

  • 素材网站的下载服务器怎么做关键词吉他谱
  • 淘客做的领券网站qq推广官网
  • 太平洋建设官方网站广州百度seo公司
  • 网站语言切换功能如何做aso推广公司
  • 网络软件开发技术网站推广和优化的原因
  • 网站建设制作设计seo优化南宁微博指数
  • 建设网站的技术手段seo如何优化网站步骤
  • 安卓手机做服务器网站商业推广软文范例
  • wordpress的豆瓣插件西安seo黑
  • 企业年金有什么好处seo诊断分析工具
  • 做微信小程序网站网络销售技巧和话术
  • 品牌网站建是啥网址怎么创建
  • 百度做公司网站需要多少钱百度小说排行榜2020
  • 智能建站系统 网站建设的首选智能识别图片
  • 网站建设方案模板无锡网站制作
  • 跨境购网站建设如何在百度上做推广
  • 什么网站可以做外贸阿里云域名注册
  • 广州网站建设外包班级优化大师学生版
  • 财务公司管理系统百度seo优化公司
  • wpf入可以做网站吗免费网站推广软件哪个好
  • 科技 网站建设平台关键词排名优化
  • 专业的设计网站建设免费推广引流app
  • 自己做众筹网站win7系统优化工具
  • 上饶专业的企业网站开发公司简述在线推广网站的方法
  • 网络营销策划书怎么写seo诊断分析
  • 什么样是权网站重高的石家庄限号
  • 网站维护需要多久时间品牌型网站制作价格
  • wordpress begin4.2北京网站优化经理
  • 卡地亚手表官方网站查询站长工具网
  • 网站必须做百度推广才能被别人搜到吗竞价推广托管开户