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

营销型网站模版新媒体营销专业学什么

营销型网站模版,新媒体营销专业学什么,电商推广合同,可以做任务的网站有哪些C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础#xff0c;但一不小心就会弄错。写出一个struct#xff0c;然后sizeof#xff0c;你会不会经常对结果感到奇怪#xff1f;sizeof的结果往往都比你声明的变量总长度要大#xff0c;这是怎么回… C语言结构体对齐也是老生常谈的话题了。基本上是面试题的必考题。内容虽然很基础但一不小心就会弄错。写出一个struct然后sizeof你会不会经常对结果感到奇怪sizeof的结果往往都比你声明的变量总长度要大这是怎么回事呢   开始学的时候也被此类问题困扰很久。其实相关的文章很多感觉说清楚的不多。结构体到底怎样对齐   有人给对齐原则做过总结具体在哪里看到现在已记不起来这里引用一下前人的经验在没有#pragma pack宏的情况下   原则1、数据成员对齐规则结构struct或联合union的数据成员第一个数据成员放在offset为0的地方以后每个数据成员存储的起始位置要从该成员大小的整数倍开始比如int在32位机为字节则要从4的整数倍地址开始存储。   原则2、结构体作为成员如果一个结构里有某些结构体成员则结构体成员要从其内部最大元素大小的整数倍地址开始存储。struct a里存有struct bb里有charintdouble等元素那b应该从8的整数倍开始存储。   原则3、收尾工作结构体的总大小也就是sizeof的结果必须是其内部最大成员的整数倍不足的要补齐。   这三个原则具体怎样理解呢我们看下面几个例子通过实例来加深理解。     例1 struct {short a1;short a2;short a3; } A;struct{long a1;short a2; } B;           sizeof(A) 6; 这个很好理解三个short都为2。           sizeof(B) 8; 这个比是不是比预想的大2个字节long为4short为2整个为8因为原则3。     例2 struct A{int a;char b;short c; };struct B{char b;int a;short c; };        sizeof(A) 8; int为4char为1short为2这里用到了原则1和原则3。        sizeof(B) 12; 是否超出预想范围char为1int为4short为2怎么会是12还是原则1和原则3。    深究一下为什么是这样我们可以看看内存里的布局情况。                  a         b         c    A的内存布局1111,     1*,       11                  b          a        c    B的内存布局1***,     1111,   11**    其中星号*表示填充的字节。A中b后面为何要补充一个字节因为c为short其起始位置要为2的倍数就是原则1。c的后面没有补充因为b和c正好占用4个字节整个A占用空间为4的倍数也就是最大成员int类型的倍数所以不用补充。    B中b是char为1b后面补充了3个字节因为a是int为4根据原则1起始位置要为4的倍数所以b后面要补充3个字节。c后面补充两个字节根据原则3整个B占用空间要为4的倍数c后面不补充整个B的空间为10不符所以要补充2个字节。    再看一个结构中含有结构成员的例子        例3 struct A{int a;double b;float c; };struct B{char e[2];int f;double g;short h;struct A i; };        sizeof(A) 24; 这个比较好理解int为4double为8float为4总长为8的倍数补齐所以整个A为24。        sizeof(B) 48; 看看B的内存布局。                                  e         f             g                h                                    i      B的内存布局11* *,   1111,   11111111, 11 * * * * * *,        1111* * * *, 11111111, 1111 * * * *     i其实就是A的内存布局。i的起始位置要为24的倍数所以h后面要补齐。把B的内存布局弄清楚有关结构体的对齐方式基本就算掌握了。     以上讲的都是没有#pragma pack宏的情况如果有#pragma pack宏对齐方式按照宏的定义来。比如上面的结构体前加#pragma pack(1)内存的布局就会完全改变。sizeof(A) 16; sizeof(B) 32;     有了#pragma pack(1)内存不会再遵循原则1和原则3了按1字节对齐。没错这不是理想中的没有内存对齐的世界吗。                                   a                b             c        A的内存布局1111,     11111111,   1111                                  e        f             g          h                     i        B的内存布局11,   1111,   11111111, 11 ,            1111, 11111111, 1111        那#pragma pack(2)的结果又是多少呢#pragma pack(4)呢留给大家自己思考吧相信没有问题。        还有一种常见的情况结构体中含位域字段。位域成员不能单独被取sizeof值。C99规定int、unsigned int和bool可以作为位域类型但编译器几乎都对此作了扩展允许其它类型类型的存在。        使用位域的主要目的是压缩存储其大致规则为        1) 如果相邻位域字段的类型相同且其位宽之和小于类型的sizeof大小则后面的字段将紧邻前一个字段存储直到不能容纳为止        2) 如果相邻位域字段的类型相同但其位宽之和大于类型的sizeof大小则后面的字段将从新的存储单元开始其偏移量为其类型大小的整数倍        3) 如果相邻的位域字段的类型不同则各编译器的具体实现有差异VC6采取不压缩方式Dev-C采取压缩方式        4) 如果位域字段之间穿插着非位域字段则不进行压缩        5) 整个结构体的总大小为最宽基本类型成员大小的整数倍。         还是让我们来看看例子。        例4 struct A{char f1 : 3;char f2 : 4;char f3 : 5; };                      a        b             c        A的内存布局111,    1111 *,   11111 * * *        位域类型为char第1个字节仅能容纳下f1和f2所以f2被压缩到第1个字节中而f3只能从下一个字节开始。因此sizeof(A)的结果为2。        例5 struct B{char f1 : 3;short f2 : 4;char f3 : 5; };        由于相邻位域类型不同在VC6中其sizeof为6在Dev-C中为2。        例6 struct C{char f1 : 3;char f2;char f3 : 5; };        非位域字段穿插在其中不会产生压缩在VC6和Dev-C中得到的大小均为3。        考虑一个问题为什么要设计内存对齐的处理方式呢如果体系结构是不对齐的成员将会一个挨一个存储显然对齐更浪费了空间。那么为什么要使用对齐呢体 系结构的对齐和不对齐是在时间和空间上的一个权衡。对齐节省了时间。假设一个体系结构的字长为w那么它同时就假设了在这种体系结构上对宽度为w的数据 的处理最频繁也是最重要的。它的设计也是从优先提高对w位数据操作的效率来考虑的。有兴趣的可以google一下人家就可以跟你解释的一大堆的道理。        最后顺便提一点在设计结构体的时候一般会尊照一个习惯就是把占用空间小的类型排在前面占用空间大的类型排在后面这样可以相对节约一些对齐空间。 转载于:https://www.cnblogs.com/JohnABC/p/4704789.html
http://www.zqtcl.cn/news/781199/

相关文章:

  • 网站防止采集如何运行安装wordpress
  • 高端论坛网站建设忘记了wordpress登录密码忘记
  • 哈尔滨网站运营服务商wordpress 访问缓慢
  • 织梦网站上传及安装定制网站建设广告
  • 阳光创信-网站建设首选品牌wordpress rss插件
  • 钦州网站建设公司哪家好邢台制作
  • 网站广告赚钱吗中国小型加工机械网
  • 2015做网站前景东莞公司的网页怎么做的
  • 专业网站设计制作过程网站什么模板做的
  • 如何制作网页的软件网站推广与搜索引擎优化
  • 四川内江网站建设太原网站建设网格未来
  • 陕西 网站建设 陕ICP创建商务站点的主要工作
  • 做照明出口的网站深圳 网站制作
  • 门户网站建设 简报嘉兴设计公司有哪些
  • 资阳房地产网站建设学校网站建设板块分析
  • 山东华邦建设网站首页wordpress h5自适应
  • 合肥市建设工程劳务分包合同备案表在哪个网站下载国际国内热点新闻事件
  • 临猗做网站怎么做挣钱的网站
  • 做软装找图片的网站wordpress 表单留言
  • 360网站挂马检测wordpress路径爆出
  • 有什么网站学做标书的专门做短视频的公司
  • 网站怎么做图片动态图片短视频推广
  • 海口的网站建设网页设计欣赏可爱风格
  • 高端网站设计哪个好五莲网站建设维护推广
  • 外贸网站 测速国内创意网页设计
  • 网站商城前台模板免费下载自己做网站统计
  • 十大免费货源网站免费版本厦门建网站多少钱
  • 网站建设投标书范本深圳网页设计培训多少钱
  • 动态ip可以做网站北京万户网络
  • 网址大全免费网站中国建设银行驻莫斯科网站