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

淮安做网站的公司有哪些公司目前上海有几个区

淮安做网站的公司有哪些公司,目前上海有几个区,在线制作广告图片,安徽省建设厅网站职称申报1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点#xff1a; 提高访问效率#xff1a;内存对齐可以使数据在内存中以更加紧凑的方式存储#xff0c;从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据#xff0c;而不需要额外的字节偏移计…1.内存对齐的意义 C 内存对齐的主要意义可以简练概括为以下几点 提高访问效率内存对齐可以使数据在内存中以更加紧凑的方式存储从而提高了数据的访问效率。处理器通常能够更快地访问内存中对齐的数据而不需要额外的字节偏移计算。 硬件要求许多硬件平台要求数据按照一定的对齐规则存储否则可能会导致性能下降或者错误。不符合硬件要求的数据存储方式可能会引发总线错误或性能降低。 结构体和类的正确性在C中结构体和类中的成员变量通常按照编译器的默认对齐方式进行排列以确保数据的正确访问和存储。手动调整对齐方式可以保证数据的正确性。 跨平台开发内存对齐可以确保数据在不同平台上的一致性。这对于跨平台开发非常重要因为不同的硬件架构可能有不同的对齐要求。 节省内存内存对齐可以减少内存碎片从而节省内存空间。当数据按照对齐要求存储时不会出现因为填充字节而浪费内存的情况。 总之C 内存对齐的主要意义在于提高访问效率、符合硬件要求、确保数据的正确性、支持跨平台开发以及节省内存空间。通过遵循对齐规则可以充分利用硬件的性能优势并确保程序在不同平台上的可移植性和正确性。 2.对齐原则 原则1 :数据成员对齐规则:结构(struct)(或联合(union))的数据成员第一个数据成员放在 offiset为0的地方,以后每个数据成员的对齐按照#pragma pack指定的数值和这个数据成员自身 长度中,比较小的那个进行。先偏移到那个对齐标准数的指定倍数在进行加上本身原则2:结构(或联合)的整体对齐规则:在数据成员完成各自对齐之后结构(或联合)本身也要进 行对齐对齐将按照#pragma pack指定的数值和结构(或联合)最大数据成员长度中比较小的 那个进行。原则3 :结构体作为成员:如果一个结构里有某些结构体成员则结构体成员要从其内部最大元 素大小的整数倍地址开始存储。 3.默认对齐值 默认对齐值: Linux默认#pragma pack(4) window默认#pragma pack(8) 注:可以通过预编译命令#pragma pack(n) , n1,2,4,8,16来改变这一系数,其中的n就是指定 的“对齐系数”。 例题1 #include iostream #include vector #include algorithm #pragma pack(1) using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量提升到2的 倍数6存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };int main() {cout sizeof(AA) endl;system(pause);return 0; } #include iostream #include vector #include algorithm #pragma pack(2) using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };struct BB {// BB 是注释掉以上 内容 按照2个字节对齐的情况int a; //长度42 按照2对齐偏移量为0存放位置区间[0,3]char b; //长度21 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按2对齐整体偏移到2的倍数6存放位置区间[6,7]char d; //长度21按1对齐偏移量为7存放位置区间[8],共9个字节。//整体存放【0-8】 位置中共9个字节。 };int main() {// cout sizeof(AA) endl;cout sizeof(BB) endl;system(pause);return 0; } #include iostream #include vector #include algorithm #pragma pack(4) using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };struct BB {// BB 是注释掉以上 内容 按照2个字节对齐的情况int a; //长度42 按照2对齐偏移量为0存放位置区间[0,3]char b; //长度21 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按2对齐整体偏移到2的倍数6存放位置区间[6,7]char d; //长度21按1对齐偏移量为7存放位置区间[8],共9个字节。//整体存放【0-8】 位置中共9个字节。 };struct CC {int a; //长度44 按照4对齐偏移量为0存放位置区间[0,3]char b; //长度41 按照1对齐偏移量为4存放区间[4]short c; //长度 24 按照两个字节对齐对齐到2的倍数6 存放位置{6,7}char d; // 14 按照1 对齐。偏移量为7.存放位置的区间为[8],总大小为9 };int main() {// cout sizeof(AA) endl;// cout sizeof(BB) endl;cout sizeof(CC) endl;system(pause);return 0; } 8字节对齐 #include iostream #include vector #include algorithm #pragma pack(8) using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };struct BB {// BB 是注释掉以上 内容 按照2个字节对齐的情况int a; //长度42 按照2对齐偏移量为0存放位置区间[0,3]char b; //长度21 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按2对齐整体偏移到2的倍数6存放位置区间[6,7]char d; //长度21按1对齐偏移量为7存放位置区间[8],共9个字节。//整体存放【0-8】 位置中共9个字节。 };struct CC {int a; //长度44 按照4对齐偏移量为0存放位置区间[0,3]char b; //长度41 按照1对齐偏移量为4存放区间[4]short c; //长度 24 按照两个字节对齐对齐到2的倍数6 存放位置{6,7}char d; // 14 按照1 对齐。偏移量为7.存放位置的区间为[8],总大小为9 };struct DD {int a; // 48 按4对齐 偏移0 位置 {0,3}char b; // 18 按1对齐 偏移4 位置{4}short c; // 28 按照2 对齐 偏移 6 位置 {6,7}char d; // 18 按照1 对齐 偏移为7 位置[8] 总大小为9 };int main() {// cout sizeof(AA) endl;// cout sizeof(BB) endl;// cout sizeof(CC) endl;cout sizeof(DD) endl;system(pause);return 0; } #按照8位有 包含 double的情况。 #include iostream #include vector #include algorithm #pragma pack(8) #include stddef.h using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };struct BB {// BB 是注释掉以上 内容 按照2个字节对齐的情况int a; //长度42 按照2对齐偏移量为0存放位置区间[0,3]char b; //长度21 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按2对齐整体偏移到2的倍数6存放位置区间[6,7]char d; //长度21按1对齐偏移量为7存放位置区间[8],共9个字节。//整体存放【0-8】 位置中共9个字节。 };struct CC {int a; //长度44 按照4对齐偏移量为0存放位置区间[0,3]char b; //长度41 按照1对齐偏移量为4存放区间[4]short c; //长度 24 按照两个字节对齐对齐到2的倍数6 存放位置{6,7}char d; // 14 按照1 对齐。偏移量为7.存放位置的区间为[8],总大小为9 };struct DD {int a; // 48 按4对齐 偏移0 位置 {0,3}char b; // 18 按1对齐 偏移4 位置{4}short c; // 28 按照2 对齐 偏移 6 位置 {6,7}char d; // 18 按照1 对齐 偏移为7 位置[8] 总大小为9 };struct EE {int a; // 48 按4对齐 偏移0 位置 {0,3}double b; // 88 按8对齐 偏移量偏移到8的倍数 偏移8 位置{8,16}short c; // 28 按照2 对齐 偏移 16 位置 {16,17}char d; // 18 按照1 对齐 偏移为17 位置[18] 总大小为9 };int main() {// cout sizeof(AA) endl;// cout sizeof(BB) endl;// cout sizeof(CC) endl;// cout sizeof(DD) endl;cout sizeof(EE) endl;cout offsetof(EE, b) endl; //查看偏移了多少内存。system(pause);return 0; } 例四结构体包含结构体的运算。 #include iostream #include vector #include algorithm #pragma pack(8) #include stddef.h using namespace std;struct AA {int a; //长度41 按照1对齐偏移量为0存放位置区间[0,3]char b; //长度11 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按1对齐偏移量存放位置区间[5,6]char d; //长度11按1 对齐偏移量为6存放位置区间[7]//整体存放【0-7】 位置中共八个字节。 };struct BB {// BB 是注释掉以上 内容 按照2个字节对齐的情况int a; //长度42 按照2对齐偏移量为0存放位置区间[0,3]char b; //长度21 按1 对齐偏移量为4存放位置区间[4]short c; //长度21,按2对齐整体偏移到2的倍数6存放位置区间[6,7]char d; //长度21按1对齐偏移量为7存放位置区间[8],共9个字节。//整体存放【0-8】 位置中共9个字节。 };struct CC {int a; //长度44 按照4对齐偏移量为0存放位置区间[0,3]char b; //长度41 按照1对齐偏移量为4存放区间[4]short c; //长度 24 按照两个字节对齐对齐到2的倍数6 存放位置{6,7}char d; // 14 按照1 对齐。偏移量为7.存放位置的区间为[8],总大小为9 };struct DD {int a; // 48 按4对齐 偏移0 位置 {0,3}char b; // 18 按1对齐 偏移4 位置{4}short c; // 28 按照2 对齐 偏移 6 位置 {6,7}char d; // 18 按照1 对齐 偏移为7 位置[8] 总大小为9 };struct EE {int a; // 48 按4对齐 偏移0 位置 {0,3}double b; // 88 按8对齐 偏移量偏移到8的倍数 偏移8 位置{8,16}short c; // 28 按照2 对齐 偏移 16 位置 {16,17}char d; // 18 按照1 对齐 偏移为17 位置[18] 总大小为9 };// struct GG {//结构体内部最大元素为int.由于偏移量8刚好是4 的倍数所以从8 开始存放struct 对应了规则三。int a1; // 48 4 8 [8,11]char b1; // 18 1 12 [12]short c1; // 28 2 14 [14,15]char d1; // 1 8 1 16 [16] }; struct FF {int a; // 48 按4 偏移0 存放的位置【0,3】char b; // 18 按1 偏移4 [4]short c; // 28 2 6 [6,7]GG g;//子strcut整体对齐系数min((max(int,short,char),8))4. 将内存补齐到4 的整数倍 20.char d; // 18 1 21 21//整体对齐系数 4 所有有21 补到24. }; // int main() {// cout sizeof(AA) endl;// cout sizeof(BB) endl;// cout sizeof(CC) endl;// cout sizeof(DD) endl;// cout sizeof(EE) endl;// cout offsetof(EE, b) endl; //查看偏移了多少内存。cout sizeof(FF) endl;// cout offsetof(FF, GG) endl;system(pause);return 0; } 4.练习 #include iostream #include vector #include algorithm #pragma pack(8) using namespace std;struct A {int a; // [0,4]double b;// [ 8, 16 ]float c;// [ 17, 20 ] }; // #24struct B {char e[2]; // 18 按照2对齐 偏移 0 位置【0,1】short h; // 28 2 2 [2,4]A a; // 24// 一共28 偏移一起达到32. };int main() {cout sizeof(B) endl;system(pause);return 0; }
http://www.zqtcl.cn/news/487733/

相关文章:

  • 怎么做自动跳转网站建站之星 discuz
  • 网站建设开发合同范本页面设计有哪几种风格
  • 重庆做网站重庆做网站做公司网站建设价格
  • 住房建设部官方网站公示公告国内卖到国外的电商平台
  • 安徽省建设厅网站巅川建设有限公司宁波城乡建设网站
  • 做财务还是网站运营wordpress主题 微博
  • 为什么要用CGI做网站网站建设 自学 电子版 pdf下载
  • 建设网站的规则营销型网站建设jm3q
  • 深圳建网站价格防水堵漏公司做网站效果怎样
  • 网站建设东莞老铁博客外国炫酷网站网址
  • 笔杆子写作网站牡丹江信息网0453免费发布信息
  • 网站建设介绍推广用语解释seo网站推广
  • 加盟企业网站建设目的速卖通下载app
  • 阳江北京网站建设网页设计与网站建设pdf
  • 做考试平台的网站网站之前没备案
  • 网站维护要多久时间北京网站优化哪家好
  • 单页推广网站模版网站建设一个购买链接
  • 湖南门户网站设计公司免费自媒体网站
  • 美食网站建设项目预算域名解析站长工具
  • 网站如何备案工信局学网站开发首先学哪些基础
  • 什么网站利于优化河北省建设局网站材料备案
  • 自学装修设计从哪里入手沈阳百度seo
  • 做jsp网站用哪些软件下载如何利用网站赚钱
  • 注册网站域名需要什么湘潭公司做网站
  • 一个网站如何优化企业资质查询平台
  • 模板网站为什么做不了优化山西网络网站建设销售公司
  • 建设什么网站可以赚钱设计本网站是用什么做的
  • 荆州市网站建设策划师
  • 苏州中国建设银行招聘信息网站中国企业登记网
  • 网站服务器的重要性新闻软文范例大全