大多数计算机使用8位的块、或者字节byte 作为最小的可寻址的内存单位、而不是访问内存中独立的位、机器级的程序将内存视为一个很大的字节数组、称为 虚拟内存(
virtual memory
), 内存的每个字节由一个唯一的数字来标识、所有可能地址的集合称为 虚拟地址空间(virtual address space
)
每个计算机都有一个字长 word size, 表明指针数据的标称大小, 对于宇哥w位的机器而言、虚拟地址的范围是 0~2m-1
32位字长限制虚拟地址空间为4GB、64位为16EB(1.84*1019)字节
大多数64位机器可以运行32位的程序、
eg. gcc -m32 prog.c 编译出来的程序可在32位机器上运行、
gcc -m64 prog.c 编译出来只可在64位机器上运行
so. 将程序称为32位或者64位程序时、区别在于程序是如何编译的、而不是运行时机器的类型
为了避免依赖大小和不同编译器设置带来的差异、ISO C99标准引入了 int32_t 和 int64_t 两种固定长度的数据类型
大端法: 高地址存储高位数
小端法则反之
对大多数程序来说、字节顺序完全不可见、但:
A机器产生的数据通过网络发送到B机器时、B机器会按照字节的内部表示来进行转换、可能会出问题、eg. add %eax, 0x2000b43(%rip) 、字节顺序就会导致数据解析错误
so. 网络应用程序的代码必须遵守已建立的关于字节顺序的规则
网友评论