信息的储存
- 一个二进制数字称为一个位,八个位构成一个字节。字节是最小的可寻址内存单位,即每个字节整体对应一个地址。
- 机器级程序将内存视为一个大的字节数组,称为虚拟内存。
内存中每个字节都对应唯一一个数字,此数字称为地址。
内存中地址的集合称为虚拟内存空间。
上述概念可联系数组记忆:
联想 |
数组 |
下标 |
下标集合 |
数组元素 |
虚拟内存 |
地址 |
虚拟内存空间 |
字节 |
信息的读取
- C指针指向字节块第一个字节的虚拟地址,字节块可以是程序、结构、整数、字符等等。
- C编译器将指针与字节块字节类型联系,访问该类型对应的字节数来获得值。
字长
- 每台计算机都有一个字长,表示指针数值的标称大小。即地址就是通过字长长度的二进制数字表示,因此字长决定了虚拟内存空间最大能容纳多少地址,从而决定了最多存在多少字节。
- 以32位机器和64位机器为例,32位机器大约可容纳4GB个字节,而64位机器大约可容纳16EB个字节。因此64位机器上指针指向的地址在32位机器上可能会溢出。
寻址和字节顺序
- 不同数据类型可占一或多个字节,下图为C语言数据类型在32位和64位机器中占据字节的长度。
- 上边我们已经知道有些程序对象可占据多个字节,那么下面我们就要搞清:多字节对象是如何在内存中排列字节的?对象的地址是什么?情况是这样的:多字节对象被储存为连续的字节序列,其地址为字节中最小字节的地址。以int型变量x为例,其地址若为0X1000,则此变量被储存在0x1000、0x1001、0x1002、0x1003四个内存位置。
- 排列表示一个对象的字节有两种方法
大端法 |
低字节高地址 ,符合阅读习惯 |
小端法 |
低字节低地址 |

- 大多数Intel兼容机用小端模式
- IBM和oracle大多数机器则用大端模式(only)(但其制造的个人计算机使用的是Intel兼容的处理器,因此用小端模式)
- 新型的微处理器:双端法,可配制成作为大端或小端的机器使用(然而,特定操作系统也会影响字节排列顺序。如微处理器上两种最常见的操作系统iOS与Android只能运行于小端模式)
- 不同类型机器间通过网络传送二进制数据时,字里的字节会成为反序。因此网络应用程序代码的编写要遵守已建立了的关于字节顺序的规则,确保发送方机器将内部表示转化为网络标准,而接收方机器将网络标准转化为内部表示
- 检查机器级程序时,阅读表示整数的字节序列。阅读小端法机器生成的机器级程序表示时,会将字节按相反顺序表示(与正常阅读顺序相反)
- 编写规避正常类型系统的程序时。C语言中可使用强制类型转换(cast)或联合(union),来允许以一种数据类型(与创建此对象时所定义数据类型不同的数据类型)引用一个对象。大多数应用编程不推荐这种技巧,但对系统级编程非常有用甚至必须。
关注公众号,让我们携手共进
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。