字节序

来源:互联网 发布:软件外包行业分析 编辑:程序博客网 时间:2024/06/15 21:11

计算机信息存储
计算机使用8位的块(字节(byte)),来作为最小的可寻址的存储器单位,而不是访问每个单独的位。机器级程序将存储器视为一个非常大的数组,称为虚拟存储器(virtual memory)。存储器的每个字节都由一个唯一的数字来标识,称为它的地址(address),所有可能地址的集合就称为虚拟地址空间(virtual address space)。这个虚拟地址空间只是一个展现给机器级程序的概念性映像(image)。实际的实现使用的是随机访问存储器RAM(通常说的内存)、磁盘(通常说的硬盘),它们结合操作系统软件,来为程序提供一个看上去统一的字节数组。
每台计算机都有一个字长(word size),它决定了虚拟地址空间的大小。对于一个字长为N位的机器而言,虚拟地址的范围是:0—(2^N)-1,程序最多访问2^N个字节。
目前(2009年)大多数的计算机的字长都是32位。这就限制了虚拟地址空间为4G字节。这也就是为什么32位XP只支持最大4GB内存。

字节是最小的可寻址的寄存器单位,当存储的长度超过一个字节长度时候,有两种方式存储:大端字节序(big endian)和小端字节序(little endian)。
举例来说,数值0x2211使用两个字节储存:高位字节是0x22,低位字节是0x11。
大端字节序:高位字节在前,低位字节在后,这是人类读写数值的方法。
小端字节序:低位字节在前,高位字节在后,即以0x1122形式储存。

比如:0x1234567,它是一个int数,占4个字节(32位)。假设系统分配给它0x100-0x103这4个内存空间。
将0x1234567换算成二进制为:1001000110100010101100111,存储时从低位每8位存入一个内存单元。为易于观察将其分割,前面不足位用0补齐:00000001,00100011,01000101,01100111。
这时有2种方式保存:
1.大端法(big endian):从0x100到0x103依次保存:00000001,00100011,01000101,01100111。亦即依次保存:01,23,45,67。
2.小端法(little endian):从0x100到0x103依次保存:01100111,01000101,00100011,00000001。亦即依次保存:67,45,23,01。

字节序列参考:http://www.ruanyifeng.com/blog/2016/11/byte-order.html
内存地址为什么用十六进制表示参考:http://blog.sina.com.cn/s/blog_9f48885501017zji.html

原创粉丝点击