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

清镇网站建设推广客户管理软件

清镇网站建设推广,客户管理软件,黄山找人做网站,wordpress page 调用c中的对齐问题 需要对齐的原因 尽管内存是以字节为单位#xff0c;但是大部分处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存#xff0c;我们将上述这些存取单位称为内存存取粒度. 现在考虑4字节存取粒度的处理器取in…c中的对齐问题 需要对齐的原因 尽管内存是以字节为单位但是大部分处理器并不是按字节块来存取内存的.它一般会以双字节,四字节,8字节,16字节甚至32字节为单位来存取内存我们将上述这些存取单位称为内存存取粒度. 现在考虑4字节存取粒度的处理器取int类型变量32位系统该处理器只能从地址为4的倍数的内存开始读取数据。 假如没有内存对齐机制数据可以任意存放现在一个int变量存放在从地址1开始的联系四个字节地址中该处理器去取数据时要先从0地址开始读取第一个4字节块,剔除不想要的字节0地址,然后从地址4开始读取下一个4字节块,同样剔除不要的数据567地址,最后留下的两块数据合并放入寄存器.这需要做很多工作. 对齐的规则 有效对齐值是 #pragma pack(n)和结构体中最长数据类型长度中较小的那个。有效对齐值也叫对齐单位。 注意 #pragma pack(n)中的n可以取(1 , 2 , 4 , 8 , 16)中的任意一值。 2规则 结构体变量的首地址是有效对齐值对齐单位的整数倍。 结构体第一个成员的偏移量offset为0以后每个成员相对于结构体首地址的 offset 都是该成员大小与有效对齐值中较小那个的整数倍如有需要编译器会在成员之间加上填充字节。 结构体的总大小为有效对齐值的整数倍如有需要编译器会在最末一个成员之后加上填充字节。 结构体内类型相同的连续元素将在连续的空间内和数组一样。 运用上面的规则下面通过实际的例子进行计算。 例1 #include iostreamstruct MyStruct {char c;int i;short s; };int main() {MyStruct obj;std::cout start addr of obj (void*)obj std::endl;std::cout offset of c offsetof(MyStruct,c) std::endl;std::cout offset of i offsetof(MyStruct,i) std::endl;std::cout offset of s offsetof(MyStruct,s) std::endl;std::cout sizeof MyStruct sizeof(MyStruct); }执行结果如下 start of obj 0x7fff2e8d1e94 offset of c 0 offset of i 4 offset of s 8 sizeof MyStruct 12结构中最长的数据类型是int长度也为4。因此结构体的有效对齐值是4。 对于c变量而言没有悬念将排在0偏移地址处。 对于变量i类型为int长度为4int和有效对齐值的最小值为4因此i需要排布在4的整数倍上因此第一个符合要求的偏移量就是4。 对于变量s类型为short长度为2short和有效对齐值二者中的最小值为2第一个符合要求的地址为8。 到目前为止使用的空间大小是10而结构体大小需要满足有效对齐值的整数倍因此需要2个填充因此结构体最终大小是12。 例2 #include iostream #pragma pack(2) struct MyStruct {char c;int i;short s; };int main() {MyStruct obj;std::cout start addr of obj (void*)obj std::endl;std::cout offset of c offsetof(MyStruct,c) std::endl;std::cout offset of i offsetof(MyStruct,i) std::endl;std::cout offset of s offsetof(MyStruct,s) std::endl;std::cout sizeof MyStruct sizeof(MyStruct); }执行结果如下 start addr of obj 0x7fff488e3418 offset of c 0 offset of i 2 offset of s 6 sizeof MyStruct 8首先#pragma pack设置的对齐值是2结构中最长的数据类型是int长度也为4。因此结构体的有效对齐值是2。 对于c变量而言没有悬念将排在0偏移地址处。 对于变量i类型为int长度为4int和有效对齐值的最小值为2因此i需要排布在2的整数倍上因此第一个符合要求的偏移量就是2。 对于变量s类型为short长度为2short和有效对齐值二者中的最小值为2第一个符合要求的地址为6。 到目前为止使用的空间大小是8已经满足结构体大小是有效对齐值的整数倍的要求。 #include iostream #pragma pack(1) struct MyStruct {char c;int i;short s; };int main() {MyStruct obj;std::cout start addr of obj (void*)obj std::endl;std::cout offset of c offsetof(MyStruct,c) std::endl;std::cout offset of i offsetof(MyStruct,i) std::endl;std::cout offset of s offsetof(MyStruct,s) std::endl;std::cout sizeof MyStruct sizeof(MyStruct); }执行结果如下 start addr of obj 0x7ffe96c067a9 offset of c 0 offset of i 1 offset of s 5 sizeof MyStruct 7首先#pragma pack设置的对齐值是1结构中最长的数据类型是int长度也为4。因此结构体的有效对齐值是1。 对于c变量而言没有悬念将排在0偏移地址处。 对于变量i类型为int长度为4int和有效对齐值的最小值为因此i需要排布在2的整数倍上因此第一个符合要求的偏移量就是1。 对于变量s类型为short长度为2short和有效对齐值二者中的最小值为2第一个符合要求的地址为5。 到目前为止使用的空间大小是7已经满足结构体大小是有效对齐值的整数倍的要求。 例4 #include iostream #include emmintrin.hstruct MyStruct {char c;__m128i i; };int main() {MyStruct obj;std::cout start addr of obj (void*)obj std::endl;std::cout offset of c offsetof(MyStruct,c) std::endl;std::cout offset of i offsetof(MyStruct,i) std::endl;std::cout sizeof MyStruct sizeof(MyStruct); }执行结果如下 start addr of obj 0x7fff9d47cd90 offset of c 0 offset of i 16 sizeof MyStruct 32首先结构中最长的数据类型是__m128i长度为16。因此结构体的有效对齐值是16。 对于c变量而言没有悬念将排在0偏移地址处。 对于变量i类型为__m128i长度为16__m128i和有效对齐值的最小值为16因此i需要排布在2的整数倍上因此第一个符合要求的偏移量就是16。 例5 #include iostream #include emmintrin.h#pragma pack(8) struct MyStruct {char c;__m128i i; };int main() {MyStruct obj;std::cout start addr of obj (void*)obj std::endl;std::cout offset of c offsetof(MyStruct,c) std::endl;std::cout offset of i offsetof(MyStruct,i) std::endl;std::cout sizeof MyStruct sizeof(MyStruct); }执行结果如下 start addr of obj 0x7ffddbec2c40 offset of c 0 offset of i 8 sizeof MyStruct 24首先#pragma pack设置的对齐值是8结构中最长的数据类型是__m128i长度为16。因此结构体的有效对齐值是8。 对于c变量而言没有悬念将排在0偏移地址处。 对于变量i类型为__m128i长度为16__m128i和有效对齐值的最小值为8因此i需要排布在2的整数倍上因此第一个符合要求的偏移量就是8。 总结 为了高效的访问内存数据通常需要对内存数据进行对齐。#pragma pack(n)用于设置的对齐有效值如果设置比结构体的最长成员还大的对齐值将是无效的。
http://www.w-s-a.com/news/369816/

相关文章:

  • 门户网站开发费怎做账做网站交互demo工具
  • 中山最好的网站建设黄村网站建设价格
  • 企业网站首页应如何布局互联网营销师证书报名入口
  • 绍兴做网站哪家好篮球网站设计
  • 鹤岗市城乡建设局网站西域电商平台官网
  • 外贸网网站建设蓝色管理系统网站模版
  • 网站服务器关闭阿里巴巴logo
  • 青岛 网站制作公司乐从网站制作
  • wordpress 微网站模板怎么用wordpress 文档下载
  • ppt网站建设的目的合肥做网站找哪家好
  • wordpress站点路径redis缓存wordpress
  • 专门设计网站的公司叫什么百度 门户网站
  • 网站建设丶金手指专业旅游网站系统哪个好
  • 苏州工业园区两学一做网站成都企业排名
  • 医药网站开发wordpress境外支付
  • 营销自己的网站网站如何做标题优化
  • 玖云建站系统wordpress nodejs版本
  • 网站开发费用计入什么二级科目重庆企业网站推广
  • wordpress 菜单怎么使用方法宜春网站推广优化
  • dede 网站图标怎么自学建筑设计
  • 河北斯皮尔网站建设做微信小程序和做网站
  • 沈阳市住房和城乡建设局网站创意上海专业网站建设
  • 免费学编程国内网站it需要什么学历
  • 相城做网站的公司网站建设范本
  • 怎么样查中企动力做的网站阿里邮箱企业版手机版
  • 电子商务网站建设与管理试卷6江门网站建设联系电话
  • 公司的网站建设做什么费用四川圣泽建设集团有限公司网站
  • 为什么网站很少做全屏福利WordPress网站自动采集源码
  • 网站备案法律diy
  • 淘宝客如何新建网站物业管理系统app