不奢望岁月静好 只希望点滴积累

0%

计算机信息存储

大多数计算机使用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. 网络应用程序的代码必须遵守已建立的关于字节顺序的规则