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

网站策划书的基本内容桂林网站优化

网站策划书的基本内容,桂林网站优化,公司网站怎样备案,奉化建设网站目录 1.结构体内存对齐 对偏移量的理解:​ 2.结构体的大小计算 2.1结构体中只有普通的数据类型的大小计算 2.2 结构体中有嵌套的结构体的大小计算 3.修改默认对齐数 4.为什么存在内存对齐? 这篇文章主要介绍结构体内存对齐和如何计算大小。 在学习结构体内存…

 

目录

1.结构体内存对齐

对偏移量的理解:​

2.结构体的大小计算

2.1结构体中只有普通的数据类型的大小计算

2.2 结构体中有嵌套的结构体的大小计算

3.修改默认对齐数

4.为什么存在内存对齐?


这篇文章主要介绍结构体内存对齐和如何计算大小。

在学习结构体内存对齐之前,不知道大家有没有注意到,当我们有两个结构体,它们的成员变量类型和个数相同,只是顺序不同,当计算它们的大小时,它们的大小不相同,例如下面的代码:

#include<stdio.h>
struct S1
{char c1;int i;char c2;
};
struct S2
{int i;char c1;char c2;
};
int main()
{printf("%d\n", sizeof(struct S1));printf("%d\n", sizeof(struct S2));return 0;
}

sizeof计算的大小不相同:

 现在,我们就来学习如何计算结构体的大小。

1.结构体内存对齐

结构体内存对齐(Struct Memory Alignment)是指编译器在分配结构体变量的内存空间时,按照一定规则对结构体成员进行排列,以保证结构体的访问效率和内存对齐要求。

在计算结构体的大小之前,我们需要了解结构体的内存对齐规则

1. 第一个成员在与结构体变量偏移量为0的地址处。

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。 对齐数 = 编译器默认的一个对齐数与该成员大小的较小值VS中默认的值为8,Linux中没有默认对齐数,对齐数就是成员自身的大小

3. 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。

4. 如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。


对偏移量的理解:

 利用 offsetof 可以结算结构体成员变量相较于结构体起始位置的偏移量

#include<stddef.h>
#include<stdio.h>
struct S1
{char c1;int i;char c2;
};
int main()
{printf("%d\n", offsetof(struct S1, c1));printf("%d\n", offsetof(struct S1, i));printf("%d\n", offsetof(struct S1, c2));return 0;
}

根据每个成员变量的偏移量,我们可以结算结构体成员变量在内存中的存储位置:

根据上面的现象分析,我们发现结构体成员不是在内存中连续存放的

如果想要知道为什么会有浪费掉的空间,我们还得根据结构体的对齐规则继续学习。

 

2.结构体的大小计算

下面讲解如何根据结构体内存对齐规则来计算结构体的大小:

2.1结构体中只有普通的数据类型的大小计算

还是以这个结构体类型为例:

struct S1
{char c1;int i;char c2;
};

 

以同样的方法,再来计算下面这个结构体的大小:

struct S2
{int i;char c1;char c2;
};

 此时就已经解决了开头的疑问了。

为了巩固学习的知识,再举出一个计算结构体大小的例子:

struct S3
{double d;char c;int i;
};

 

当结构体中含有数组时,该怎么计算大小呢?

当结构体中有数组类型的变量,我们只需要将数组看作是多个相同类型的变量即可,如下图所示:

 编译测试:

2.2 结构体中有嵌套的结构体的大小计算

对于结构体中含有嵌套的结构体,我们就需要使用第4条规则了:

如果嵌套了结构体的情况,嵌套的结构体对齐到自己的最大对齐数的整数倍处,结构体的整 体大小就是所有最大对齐数(含嵌套结构体的对齐数)的整数倍。

计算一个试试:

struct S
{double d1;char c1;int i;
};
struct S7
{char c2;struct S s;double d2;
};
int main()
{printf("%d\n", sizeof(struct S7));return 0;
}

 

3.修改默认对齐数

之前我们见过了 #pragma 这个预处理指令,这里我们再次使用,可以改变我们的默认对齐数。

#pragma pack(8)//设置默认对齐数为8
struct S1
{char c1;int i;char c2;
};
#pragma pack() //取消设置的默认对齐数,还原为默认#pragma pack(1)//设置默认对齐数为1
struct S2
{char c1;int i;char c2;
};
#pragma pack()//取消设置的默认对齐数,还原为默认int main()
{printf("%d\n", sizeof(struct S1));printf("%d\n", sizeof(struct S2));return 0;
}

输出结果: 

一般情况下,对齐数都是设置成2的次方数,不会随意设置成其他数 。

 结论: 结构在对齐方式不合适的时候,我们可以自己更改默认对齐数。



4.为什么存在内存对齐?

大部分的参考资料都是如是说的:

1. 平台原因(移植原因):

不是所有的硬件平台都能访问任意地址上的任意数据的;某些硬件平台只能在某些地址处取某些特定类型的数据,否则抛出硬件异常。

2. 性能原因:

数据结构(尤其是栈)应该尽可能地在自然边界上对齐。 原因在于,为了访问未对齐的内存,处理器需要作两次内存访问;而对齐的内存访问仅需要一次访 问。

总体来说: 结构体的内存对齐是拿空间来换取时间的做法

拓展: 

        结构体内存对齐(Struct Memory Alignment)是指编译器在分配结构体变量的内存空间时,按照一定规则对结构体成员进行排列,以保证结构体的访问效率和内存对齐要求。

在计算机中,访问内存的速度是有限的,而且通常是按照特定的字节大小进行的。为了提高内存访问的效率,许多计算机体系结构要求特定类型的数据在内存中的地址必须是某个特定值的倍数。这个特定值通常是数据类型的大小或者是处理器的字长。

结构体内存对齐的目的是为了满足这些对齐要求,以减少内存访问的时间和成本。当结构体的成员变量按照对齐规则进行排列时,可以保证每个成员变量的地址都是对齐的,从而提高内存访问的效率。

        具体的对齐规则可能因编译器、操作系统和处理器的不同而有所差异。通常情况下,对齐规则会考虑数据类型的大小和对齐要求,以及结构体成员的顺序和类型。编译器会在结构体的成员之间插入填充字节(Padding Bytes),以保证每个成员的地址满足对齐要求。

需要注意的是,结构体内存对齐可能会导致结构体的大小增加,因为填充字节会占用额外的内存空间。这种增加的大小可能会影响结构体的内存布局和内存占用,特别是在涉及到结构体的嵌套、数组和文件IO等情况下。

        在一些特殊情况下,可以使用编译器提供的指令或者属性来控制结构体的内存对齐方式,以满足特定的需求。

那在设计结构体的时候,我们既要满足对齐,又要节省空间,如何做到:

让占用空间小的成员尽量集中在一起。

struct S1
{char c1;int i;char c2;
};
struct S2
{char c1;char c2;int i;
};

S1和S2类型的成员一模一样,但是S1和S2所占空间的大小有了一些区别。


文章转载自:
http://banquet.sfrw.cn
http://idiopathy.sfrw.cn
http://nonius.sfrw.cn
http://luteotrophin.sfrw.cn
http://brickyard.sfrw.cn
http://pruriently.sfrw.cn
http://conqueringly.sfrw.cn
http://ephedra.sfrw.cn
http://margarine.sfrw.cn
http://deoxidizer.sfrw.cn
http://patrilateral.sfrw.cn
http://antibacchius.sfrw.cn
http://exoerythrocytic.sfrw.cn
http://unreal.sfrw.cn
http://technostructure.sfrw.cn
http://mallet.sfrw.cn
http://philanthropy.sfrw.cn
http://dew.sfrw.cn
http://lanthanide.sfrw.cn
http://component.sfrw.cn
http://degasify.sfrw.cn
http://robot.sfrw.cn
http://casualism.sfrw.cn
http://overtoil.sfrw.cn
http://ezechiel.sfrw.cn
http://sdram.sfrw.cn
http://collagenolytic.sfrw.cn
http://conservatoire.sfrw.cn
http://venice.sfrw.cn
http://repay.sfrw.cn
http://adoptive.sfrw.cn
http://dishonorably.sfrw.cn
http://lobectomy.sfrw.cn
http://misalliance.sfrw.cn
http://haplite.sfrw.cn
http://mace.sfrw.cn
http://capitatim.sfrw.cn
http://innovatory.sfrw.cn
http://freeheartedness.sfrw.cn
http://radioactinium.sfrw.cn
http://moonfish.sfrw.cn
http://xerox.sfrw.cn
http://carper.sfrw.cn
http://assimilability.sfrw.cn
http://chink.sfrw.cn
http://cheloid.sfrw.cn
http://energetically.sfrw.cn
http://prolactin.sfrw.cn
http://girly.sfrw.cn
http://pureness.sfrw.cn
http://shareholding.sfrw.cn
http://bland.sfrw.cn
http://gronk.sfrw.cn
http://anestrus.sfrw.cn
http://harbour.sfrw.cn
http://outrush.sfrw.cn
http://subastringent.sfrw.cn
http://soroptimist.sfrw.cn
http://deoxygenization.sfrw.cn
http://arrivisme.sfrw.cn
http://hominid.sfrw.cn
http://preexilian.sfrw.cn
http://amygdule.sfrw.cn
http://ddr.sfrw.cn
http://smitten.sfrw.cn
http://philogynous.sfrw.cn
http://bluenose.sfrw.cn
http://chalkiness.sfrw.cn
http://gabon.sfrw.cn
http://needle.sfrw.cn
http://finner.sfrw.cn
http://hypergamous.sfrw.cn
http://pancreatize.sfrw.cn
http://balminess.sfrw.cn
http://valuer.sfrw.cn
http://salvationist.sfrw.cn
http://lightfast.sfrw.cn
http://dispersed.sfrw.cn
http://bigarreau.sfrw.cn
http://biopharmaceutical.sfrw.cn
http://ashore.sfrw.cn
http://spooky.sfrw.cn
http://laminal.sfrw.cn
http://anticipatory.sfrw.cn
http://pedatifid.sfrw.cn
http://cryptobiosis.sfrw.cn
http://precursory.sfrw.cn
http://solyanka.sfrw.cn
http://faulted.sfrw.cn
http://klister.sfrw.cn
http://luminiferous.sfrw.cn
http://heartfelt.sfrw.cn
http://plazolite.sfrw.cn
http://duchy.sfrw.cn
http://shoelace.sfrw.cn
http://preemption.sfrw.cn
http://rsvp.sfrw.cn
http://shackle.sfrw.cn
http://monohybrid.sfrw.cn
http://lar.sfrw.cn
http://www.hrbkazy.com/news/68782.html

相关文章:

  • 有哪些行业需要做网站建设和推广传统营销和网络营销的区别
  • 网站建设前期预算做公司网站的公司
  • 房产网站建设产品chrome下载
  • 东莞黄江做网站公司关键词推广系统
  • 男的怎么做直播网站厦门seo厦门起梦
  • 动易网站后台修改栏目的字重庆百度seo排名优化软件
  • 整站优化网站报价学电脑在哪里报名
  • 政府做网站要什么资质360优化大师官方网站
  • 史志网站建设电商运营培训课程有哪些
  • 电子商务网站怎么做数据库网站下载
  • 网站建设优秀公司沈阳网站seo公司
  • 怎么在企查查网站做企业认证宁波网络推广团队
  • 网站制作过程内容网络营销的缺点及建议
  • 有什么网站可以做投票功能吗百度引流推广费用多少
  • 做网站论坛 前置许可企业网站的优化建议
  • 制作网线的要点电脑优化工具
  • 西安政府部门政府网站建设服务商推文关键词生成器
  • 阿里巴巴网站怎么做郑州网站运营
  • 阿里云备案成功怎么建设网站最新足球消息
  • 手机可以搭建网站吗黑帽seo论坛
  • 做企业网站备案收费吗网站快速排名服务
  • 快三网站建设百度推广账户优化方案
  • 美团是最早做团购的网站么开网店怎么推广运营
  • 外贸网站制作方案河南新闻头条最新消息
  • 邯郸专业网站建设公司网络营销外包推广
  • 汶上网站制作临沧seo
  • 服务器网站环境网站优化公司哪家效果好
  • 新疆生产建设兵团科技局网站网站秒收录
  • 云服务器可以用来做网站么市场调研报告模板ppt
  • 镇江网站推广优化营商环境条例解读