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

织梦企业网站网页设计的完整流程

织梦企业网站,网页设计的完整流程,宿松网站建设,论坛式网站建设🤡博客主页:醉竺 🥰本文专栏:《C语言深度解剖》 😻欢迎关注:感谢大家的点赞评论关注,祝您学有所成! ✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看&…

🤡博客主页:醉竺

🥰本文专栏:《C语言深度解剖》

😻欢迎关注:感谢大家的点赞评论+关注,祝您学有所成!


✨✨💜💛想要学习更多C语言深度解剖点击专栏链接查看💛💜✨✨ 


目录

1. 结构体内存大小计算(引例) 

2. 结构体内存对齐规则 

2.1:对齐规则1 

2.2:对齐规则2 

2.3:对齐规则3 

 2.4:对齐规则4

3. 实战 


上一篇文章中我们学习了结构体的进阶,其中介绍了结构体内存对齐的规则,由于结构体内存对齐需要讲解的篇幅较长,所以这里专门写了一篇文章来讲解。感兴趣的可以先阅读这一篇文章:

《结构体进阶学习》icon-default.png?t=N7T8https://blog.csdn.net/weixin_43382136/article/details/138768281

1. 结构体内存大小计算(引例) 

下面实例中结构体的类型你觉得是多大? (Visual Stdio环境下)

#include <stdio.h>
struct Stu
{char name;int age;
};int main()
{printf("%d", sizeof(struct Stu));return 0;
}

初学结构体的人会认为,结构体类型的大小是其中各变量的大小之和,上述代码中结构体是 5 字节,其实并非如此!下面是运行结果: 8 (字节)

为什么输入结果是8而不是5呢?这与结构体在内存中特殊的存储方式有关,接下来就引出我们本章的主题 《结构体内存对齐》

2. 结构体内存对齐规则 

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

2. 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

    对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。

  • VS中默认的值为8
  • GCC环境下没有默认对齐数,此时结构体成员自身的大小就是对齐数

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

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

上述规则猛的一看会有点懵,什么跟什么啊?请继续往下阅读。

2.1:对齐规则1 

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

偏移量:结构体变量中第一个成员的地址 相对于首地址的距离。

对齐规则1中偏移量为0,就代表着结构体变量中第一个成员,是从开辟的整个结构体变量空间的首地址开始存储。

这里我们用以下结构体作为一个例子:下面结构体变量的大小为12字节

struct S1
{char c1;int i1;int i2;
};

我们一步步画图来分析 :

c1 存储位置

2.2:对齐规则2 

  • 其他成员变量要对齐到某个数字(对齐数)的整数倍的地址处。

对齐数 = 编译器默认的一个对齐数 与 该成员大小的较小值。

VS中默认的值为8

GCC环境下没有默认对齐数,此时结构体成员自身的大小就是对齐数

1. 当前是VS环境下,默认对齐数是8,后面两个成员分别是 int i1, int i2,它们都是4字节,因此在VS环境下,这两个成员变量的对齐数 就是 “4”

2. 根据规则2,其他成员变量要对齐到 "对齐数"的整数倍地址处,已知后面两个成员 i1 和 i2 对齐数是 4 ,这个规则意味着,i1 和 i2 要从偏移量为 4 的整数倍位置开始存储。具体看下图:

同理 i2 也是从 偏移量为 4 的整数倍位置开始存储,这里由图可知,需要从偏移量为 8 的位置开始存储,如下图所示:

而偏移量为“1,2,3”的空白处则会  

2.3:对齐规则3 

  • 结构体总大小为最大对齐数(每个成员变量都有一个对齐数)的整数倍。 
struct S1
{char c1;int i1;int i2;
};

 对于上述的结构体例子,应用到规则3,其实就已经结束了,因为规则4是针对嵌套结构体的。

规则3含义:

  1. 当结构体中的最后一个成员被正确存放后,结构体的总大小并非简单地等于从第一个成员(偏移量为0的位置)到最后一个成员最后一个字节的长度。
  2. 而是首先判断出所有成员中对齐数中的最大对齐数,c1对齐数是 1,i1 和 i2 对齐数都是 4,因此整个结构体成员中的最大对齐数是 4.
  3. 最后,如果 从第一个成员(偏移量为0的位置)到最后一个成员最后一个字节的长度不是 最大对齐数 4 的整数倍,则整个结构体占据的总内存需要从最后一个字节继续延伸,直到整个结构体大小是 4 的整数倍。

上个例子中,最后一个成员 i2 成员存储好之后,最后一个字节的位置已经在 偏移量为 11 的位置处了,此时整个结构体变量的总大小已经是 12 了,12是 最大对齐数 4 的整数倍了,所以无需延伸,上述结构体S1类型的总大小就是12字节。 

 2.4:对齐规则4

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

对齐规则4 其实跟 对齐规则3类似,只不过一个判断成员变量的对齐数,一个是 整个结构体的最大对齐数。

这里我们看一个新的例子:

S2结构体大小为 20 字节

struct S1
{char c;int i1;int i2;
};struct S2
{char a;struct S1 s1;    //嵌套结构体char b;
};

3. 实战 

接下来会再整一个综合的例子,不再做出详细解释,看图分析即可。

S1的内存分布:

a的对齐数是4,b的对齐数是1,d的对齐数是8,因此 S1整个结构体的最大对齐数是8,总体大小为16字节。 

S2的内存分布: 

ch 的对齐数是1,s1 的对齐数是8, i 的对齐数是4,因此S2结构体类型最大对齐数是8.

http://www.yayakq.cn/news/793862/

相关文章:

  • 南京做网站南京乐识权威西安做百度网站公司
  • 手机网站接入微信登录宁波网站推广方式
  • 网站的排版问题永州网站网站建设
  • 成都网站改版优化wordpress加密插件
  • 中山网站建设案例wordpress 中的函数
  • 乐清站在哪建设网站终身免费
  • 自适应网站怎么做移动配置沈阳关键词优化价格
  • 福安做网站wordpress 添加钩子
  • 网站建设 类该如何与网站设计公司沟通
  • 网站建设 合作协议沈阳网站建设教案模板
  • 制作网站比较大的几家公司安陆 网站建设
  • 旅游网站建设项目中国最有名的建设网站
  • 网站的页面动态需要哪些方法做四大工业设计软件
  • 5050众筹网站开发成都住建局官网报名被挤爆黑幕
  • 手机微网站开发wordpress前台发布文章
  • 免费建设外贸网站广东深广东深圳网站建设
  • 如何优化营销型企业网站长尾关键词挖掘站长工具
  • 做网站的人属于什么行业2345网址大全浏览器
  • 广州 网站建设 020成都免费建站模板
  • 网站开发不用框架wordpress相册样式
  • 做一个app需要多少成本苏州网站搜索引擎优化
  • 如何建立一个网站来卖东西青岛工程建设管理信息网官方网站
  • 漳州微信网站建设电话专题网站开发 交互方法
  • 呼伦贝尔旅游包车网站咋做wordpress 怎么手动更新
  • wordpress顶部外贸网站建设平台优化营销推广
  • 个人网站备案申请自己建网站好还是用淘宝做好
  • 案例剖析网站wd网址怎么推广
  • 广东一站式网站建设推荐企业电话认证
  • 乡村网站建设鄞州区建设局网站
  • 网上服装商城网站代码怎么去做网站