下载此文档

对对齐(alignment)的一些认识.doc


文档分类:汽车/机械/制造 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
对对齐(alignment) 的一些认识对对齐(alignment) 的一些认识关于内存地址对齐,尤其是 struct 中成员的对齐导致的 struct 的 size 问题很多人( 包括我:() 似乎都没有一个比较清晰的认识,所以产生了整理这方面思路和帖子的想法,下面的文字是资料、文档、实验和推测的混合体, 有错误是肯定的:)。能给您提供一点帮助, 是我最大的愿望。( 有点麻了) 引: struct s {char c;int i;}; 在 sizeof(char)=1 sizeof(int)=4 的情况下 sizeof(struct s) 为什么经常是 8 不是 5? 这个就是对齐(alignment) 的缘故。那么什么是对齐?现代计算机中内存空间都是按照 byte 划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始, 但实际情况是在访问特定变量的时候经常在特定的内存地址访问, 这就是对齐。为什么呢? msdn for vc6 中有这么一段: This principle is especially important when you write code for porting to multiple processors. A misaligned 4-byte data member, which is on an address that is not a multiple of four, causes a performance penalty with an 80386 processor and a hardware exception with a MIPS® RISC processor. In the latter case, although the system handles the exception, the performance penalty is significantly greater. 大意是: 1. 某些硬件平台只能在某些地址处取某些特定类型的数据, 否则抛出硬件异常。 2. 其余的硬件平台虽然可以在任何地址处取得任何类型的数据, 但如果变量没有对齐的情况下, 取这个数据可能有效率上的损失。所以为了不出错或者优化, 在访问特定变量的时候要在特定的内存地址访问, 这也是很多时候管对齐叫优化对齐的缘故。普通情况下编译器负责做这件事情。对齐问题在移植的时候尤其需要考虑进去。一、 vc6 和 i386( 以下所说 gcc 均为这个版本) 如何做这件事情的 1. 基本类型的数据(int,double 等) 依编译器有不同的对齐策略在 vc6 中基本类型的数据对齐在 sizeof( 基本类型的数据)上( 以下说" 对齐在 N上" 的意思就是:地址%N=0) 在 gcc中 cha r 对齐在1上, shor t 对齐在2上, int 对齐在4上, doubl e 对齐在 4 上。这里有一个概念: alignment-requirement( 不知应该翻译成什么), 对应的就是上面的 N,即 short 的 alignment-requirement 是2, int 的 alignment-requirement 是4 的基本类型的数据成员对齐和 struc

对对齐(alignment)的一些认识 来自淘豆网m.daumloan.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人xgs758698
  • 文件大小55 KB
  • 时间2016-08-16