(1)大多数计算机使用字节作为最小的可寻址单位,而非访问内存中单独的位。
(2)从机器级程序视角而言,内存可以视为一个非常大的字节数组(虚拟地址空间)。
字长
每台计算机都有一个字长,指明指针数据的标称大小(即一个指针数据有多少位)。虚拟地址是以这样的位来编码的,因此字长直接决定虚拟地址空间的大小。对于字长位w的机器而言,程序最多可以访问**2w**字节的内存空间
gcc可以使用 -m32 -m64选项选择目标程序运行的平台
在32位和64位的机器上,字长主要影响long类型和指针类型的数据长度
C99往后的标准可以使用int32_t、int64_t等 指示符实现固定长度的类型声明
明确指定变量类型长度是实现可移植性的一个重要因素。
字节顺序
超过8位的数据需要存放在内存的不同字节中,由此引申出大端序和小端序的概念。
**大端序:**将变量中高位数据存储在内存地址较小的位置。
**小端序:**将变量中地位数据存储在内存地址较小的位置。
以十进制表示时,1234中,1是千位,2是百位,3和4分别是十位和个位,因此1是变量中的高位,4是变量中的低位。
十六进制表示时,0xABCD中A高位,D是低位。数值表示时,高位在左侧,低位在右侧。有时候会有资料直接用16进制字符串直接表示内存内容,此时需要根据大小端序去仔细还原原始数据。
大多数Intel兼容机器只支持小端模式,另一方面,IBM和Orcale的大多数机器使用大段模式,而其制造的个人电脑大多是使用的是小端模式。许多比较新的处理器都使用双端法。
实际上,使用大端序和使用小端序由选定的操作系统而定。程序员在进行编程时,字节顺序是不可见的,但是在进行网络通信时,不同的字节序决定了不同的装包以及解包算法。