字节序、字节对齐的理解

字节序、字节对齐的理解

ID:10278092

大小:70.49 KB

页数:10页

时间:2018-06-14

字节序、字节对齐的理解_第1页
字节序、字节对齐的理解_第2页
字节序、字节对齐的理解_第3页
字节序、字节对齐的理解_第4页
字节序、字节对齐的理解_第5页
资源描述:

《字节序、字节对齐的理解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、1、前言作为一名C/C++程序员,字节是我们天天都要与之打交道的一个东西。我们和它熟稔到几乎已经忘记了它的存在。可是,它自己是不甘寂寞的,或迟或早地,总会在某些时候探出头来张望,然后给你一个腿儿绊。其实,只要你真正了解了它的底细,你就会畅行无阻。在本文中,我们将首先简要了解一下字节的概念,然后着重了解一下字节序问题和字节对齐问题。2、什么是字节我们知道,二进制计算机(也就是我们目前接触到的几乎所有的计算机)的最小数据单位是位(bit)。一位数据只能够表示两种含义(需要说明,尽管我们通常把单个位表示的两种含义选择为相互对立的含义,但这并不是必然的,例如你可以认为1代表5个人,0

2、代表8个人),对于绝大多数的计算要求,单个位显然不能满足。因此,我们通常都会使用一连串的位,我们可以称之为位串(bitstring,请爱好质疑的的朋友注意,此术语非我杜撰)。由于种种原因,计算机系统都不会让你使用任意长度的位串,而是使用某个特定长度的位串。一些常见的位串长度形式具有约定好的名称,如,半字节(nibble,貌似用的不多)代表四个位的组合,字节(byte,主角出场!)代表8个位的组合。再多的还有,字(word)、双字(Doubleword,通常简写为Dword)、四字(Quadword,经常简写为Qword)、十字节(Tenbyte,也简写为Tbyte)。在这些里

3、面,字(word)有时表示不同的含义。在Intel体系里,word表示一个16位的数值,它是固定大小的。而在另外一些场合,word表示了CPU一次可处理的数据的位数,表示一个符合CPU字长(word-length)的数目的位串。事实上我们接触较多的ARM体系中,word就有不同的含义,它表示一个32位的数据(与机器字长相同),对于16位大小的数据,ARM使用了另外的一个术语,叫作半字(half-word),请大家在文档阅读时加以注意。另外,Qword也是Intel体系中的术语,其他的体系中可能并不使用。在本文中,我们按照Intel的惯例来使用字或者word这一术语。一个字节中

4、共有8个数据位,有时需要用图表逐位表述各个位。习惯上,我们按照下面的图来排列各个位的顺序,即,按照从右到左的顺序,依次为最低位(从第0位开始)到最高位(对于字节,则是第7位):字节是大多数现代计算机的最小存储单元,但这并不代表它是计算机可以最高效地处理的数据单位。一般的来说,计算机可以最高效地处理的数据大小,应该与其字长相同。在目前来讲,桌面平台的处理器字长正处于从32位向64位过渡的时期,嵌入式设备的基本稳定在32位,而在某些专业领域(如高端显卡),处理器字长早已经达到了64位乃至更多的128位。3、字节序问题的由来对于字、双字这些多于一个字节的数据,如果把它们放置到内存中

5、的某个位置上,可以看出,我们还可以将之看作是字节的序列。一个字是两个字节,双字则是四个字节。假设有以下数据:0x12345678、0x9abcdef0。在此处,我使用了我们最习惯的十六进制表示法,并给出了两个双字的值。按照惯例,我把双字的左侧视为高端,而把右侧视为低端。把它们顺序放置在起始地址为0的内存中,如下图所示:由图示可知,0x9abcdef的相应地址为0x04。现在,问题来了,如果有一个内存操作,要从地址0x06处读取一个字,得到的结果是多少呢?答案是:不一定。这里的本质问题在于,如何把多字节的对象存储到内存中去呢?即使使用最正常的思维去考虑这个问题,你也会发现有两种

6、方法。第一种方法是,把最低端的字节放到指定的起始位置(即基地址处),然后按照从低到高的字节顺序把其余字节依次放入,如下图a;另一种方法非常类似,但是对高端字节和低端字节的处理顺序正好相反,如下图b(我确信你还可以想出其他的方法,但是除二字节的情况外,必然会打破字节排列顺序的一致性,我视之为反常规思维的产物,此处暂不考虑)。图a图b在很久之前,哪一种存储方式更为合理曾经有过争论。到今天,争论的结果已经无关紧要了,紧要的是以下事实:这两种存储方式都被应用到了现实的计算机系统中。上图a中的排列方式为Intel所采用并大行其道,而图b的排列方式则被大多数的其他平台采用(如最近被苹果公

7、司彻底抛弃的PowerPC),因此上,我们不能称之为罕见的用法。之所以造成事实上的不经常见到,其原因正如我今天中午所得到的消息:Intel的CPU占整个市场份额的80%以上。这两种排列方式通常用小端(littleendian)和大端(bigendian)来称谓。这两个奇怪的名字据说来源于童话《格列佛游记》,其中小人国里的公民为了鸡蛋到底是应该从小的一头打开还是大的一头打开而大起争执。Intel的方式对应于“小端”,顺便说一句,大端的方式也有一个大公司的名字作为其代表,即最近开始没落的Motorola。如

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。