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

微信公众网站怎么做的wordpress 载入慢

微信公众网站怎么做的,wordpress 载入慢,现在购物平台哪个最好,请问有没有做网站目录 引言#xff1a; 为什么存在结构体内存对齐? 结构体内存对齐规则#xff1a; 练习一#xff1a; 测试代码#xff1a; 结果如下#xff1a; 第二个练习#xff1a;结构体的嵌套问题 测试代码#xff1a; 代码结果如下#xff1a; 两个关于结构体的易错…目录 引言 为什么存在结构体内存对齐? 结构体内存对齐规则 练习一 测试代码 结果如下 第二个练习结构体的嵌套问题 测试代码 代码结果如下 两个关于结构体的易错点 第一个易错点 第二个易错点结构的⾃引⽤ 解决方法 结语 引言 今天我们就要来学习一下考试经常考察的结构体内存对齐问题相信有很多同学都被这个问题恶心过不过没有关系今天我会给你们讲清楚的请各位系好安全带我们要开始出发啦 为什么存在结构体内存对齐? 大部分的参考资料都是这样说的 1. 平台原因 (移植原因) 不是所有的硬件平台都能访问任意地址上的任意数据的某些硬件平台只能在某些地址处取某些特定类型的数据否则抛出硬件异常。 2. 性能原因 数据结构(尤其是栈)应该尽可能地在自然边界上对齐。原因在于为了访问未对齐的内存处理器需要作两次内存访问而对齐的内存访问仅需要⼀次访问。假设一个处理器总是从内存中取8个字节则地址必须是8的倍数。如果我们能保证将所有的double类型的数据的地址都对齐成8的倍数那么就可以用一个内存操作来读或者写值了。否则我们可能需要执行两次内存访问因为对象可能被分放在两个8字节内存块中。 总体来说结构体的内存对齐是拿空间来换取时间的做法。  介绍完原因后接下来是结构体内存对齐的规则重中之重这里一定要弄懂啊 结构体内存对齐规则 1.结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量为0的地址处 2. 其他成员变量要对⻬到某个数字对⻬数的整数倍012...的地址处。 对⻬数编译器默认的⼀个对⻬数与该成员变量⼤⼩的较⼩值。 - VS 中默认的值为 8 - Linux中 gcc 没有默认对⻬数对⻬数就是成员⾃⾝的⼤⼩ 3. 结构体总⼤⼩为最⼤对⻬数结构体中每个成员变量都有⼀个对⻬数所有对⻬数中最⼤的的整数倍。 4. 如果嵌套了结构体的情况嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处结构体的整体⼤⼩就是所有最⼤对⻬数含嵌套结构体中成员的对⻬数的整数倍。  接下来为了帮助大家理解下面我给出几个实例大家可以自己手算 练习一 因为c1是char类型1个字符系统给的对齐数为8和1相比取小的c1的对齐数为min18所以在哪开始都可以i是int类型4个字节要从它的整数倍开始所以只能从min48开始c2在哪都可以开始最后不要忘了第三点结构体总⼤⼩为最⼤对⻬数结构体中每个成员变量都有⼀个对⻬数所有对⻬数中最⼤的的整数倍。这里特别注意是总大小不是最大下标是最大下标加一。故最后下标到11位置图解如下 c1用蓝色表示浪费的地址为白色i为红色c2为绿色 测试代码 #define _CRT_SECURE_NO_WARNINGS 1 #include stdbool.h #include stdio.h #include stdlib.h #include stdio.h struct S1 {char c1;int i;char c2; }; int main() {int t sizeof(struct S1);printf(%d, t); } 结果如下 第二个练习结构体的嵌套问题 解决这个问题后大家结构体内存对齐问题就没有问题啦大家快快算算看 //练习2-结构体嵌套问题 struct S3 {     double d;     char c;     int i; }; struct S4 {     char c1;     struct S3 s3;     double d; }; printf(%d\n, sizeof(struct S4)); 解释如下c1跳过既然要计算s3那么我们就要返回S3中先算s3的内存占多大d为double类型8个字节min880是8的整数倍c随便i对齐数为min489不是4的倍数故跳到12最后算下来s3占的字节数为16图解如下。 计算完s3我们终于可以计算s4了s3的填入看看我们对齐规则的第四点4. 如果嵌套了结构体的情况嵌套的结构体成员对⻬到⾃⼰的成员中最⼤对⻬数的整数倍处结构体的整体⼤⼩就是所有最⼤对⻬数含嵌套结构体中成员的对⻬数的整数倍。在本题结构体成员的成员中最大对齐数为d的8故s3的对齐数为8d为min88最后别忘了第三点3. 结构体总⼤⼩为最⼤对⻬数结构体中每个成员变量都有⼀个对⻬数所有对齐数中最⼤的的整数倍。 总图解如下c1蓝色s3绿色d红色白色为浪费空间 测试代码 #define _CRT_SECURE_NO_WARNINGS 1 #include stdbool.h #include stdio.h #include stdlib.h #include stdio.h //练习4-结构体嵌套问题 struct S3 {double d;char c;int i; }; struct S4 {char c1;struct S3 s3;double d; }; int main() {printf(%d\n, sizeof(struct S4));return 0; }代码结果如下 补充一个小知识编译器的默认对齐数是可以自己修改的c语言就是这么霸道 #pragma这个预处理指令可以修改编译器的默认对齐数。用法如下要加一个pack #define _CRT_SECURE_NO_WARNINGS 1 #include stdbool.h #include stdio.h #include stdlib.h #include stdio.h #pragma pack(1)//设置默认对⻬数为1 struct S {char c1;int i;char c2; }; #pragma pack()//取消设置的对⻬数还原为默认 int main() {//输出的结果是什么printf(%d\n, sizeof(struct S));return 0; } 到这我就已经把结构体的对齐给你讲清楚了大家一定要自己算算考试遇到直接给它喵了 两个关于结构体的易错点 关于结构体为了防止大家出错这里我给大家总结出来两个易错点供大家参考大家看看自己有没有遇到这些情况遇到了又该如何解决呢下面我将带大家避免掉入这些坑。 第一个易错点 大家先看看下面这个代码合不合法 struct {int a;char b;float c; }x; struct {int a;char b;float c; }a[20], * p; //下面这个合法吗 *p x;我们可以看到这是因为没有给结构体命名导致的争议其实这是非法的因为这两个结构体是不同的‍也就是说这两个结构体不是同一个类型的所以匿名的结构体类型如果没有对结构体类型重命名的话基本上只能使用一次。 第二个易错点结构的⾃引⽤ 下面这个代码合法吗‍ 如果正确的话那么sizeofstruct Node的值是多少 很明显这是非法的因为这样sizeofstruct Node的值是无穷的就好像递归没有出口一样 正确引用如下 我们可以看到这就是类似链表洛 struct Node {     int data;     struct Node* next; }; 解决方法 定义结构体不要使用匿名结构体了好习惯要记住哟 结语 其实写博客不仅仅是为了教大家同时这也有利于我巩固自己的知识点和一个学习的总结由于作者水平有限对文章有任何问题的还请指出接受大家的批评让我改进如果大家有所收获的话还请不要吝啬你们的点赞收藏和关注这可以激励我写出更加优秀的文章。
http://www.zqtcl.cn/news/22316/

相关文章:

  • 家居企业网站建设平台企业网站开发合同
  • 网站建设中添加图片链接企业网站的规划与设计
  • 西安做网站报价怎么申请免费企业邮箱账号
  • 网站建设的多少钱阿里云网站建设方案书中山市
  • 寻找网络公司做公司网站升级改版企业自己做网站方法
  • 域名解析映射到网站空间怎么做潍坊网站制作多少钱
  • 我是做网站的打折网站建设教程下载
  • 网站培训方案o2o电子商务网站开发与运营
  • 涪陵区小城镇建设管理处网站h5怎么生成二维码
  • 国内做的比较好的旅游网站网站的空间和域名备案吗
  • 找个做游戏的视频网站毕业设计网站做几个页面
  • 建立网站的关键是定位郑州做网站哪家公司最好
  • 书画网站 建设方案临海建设局网站
  • 做轻淘客网站要多大的空间安徽省外经建设集团有限公司网站
  • 山西省网站建设价格网络广告的形式有哪些
  • 网站内部优化是什么意思音乐网站设计怎么做
  • 企业网站建设重要性肖云路那有做网站公司
  • 网站设计公司北京化妆品网站html模板
  • 渠道网站企业所得税2022年税率
  • 做百度推广网站被攻击自己做的网站很慢
  • 电脑公司网站设计qq上如何做文学网站
  • 国内flash网站公司方案策划书
  • 建设网站需要域名还有什么长沙网站建设费用
  • 西安网站建设的网站一个网站两个数据库
  • 两学一做 投稿网站甘肃兰州怎么样
  • 网站建设公司招网站设计wordpress页面简码
  • wordpress内容页插件资深seo顾问
  • 公司网站 设计方案辅导班广告去哪个网站做
  • 织梦系统网站打开速度慢抖音推广计划
  • 北京网站建设上北京九五至尊网络商城简介