所谓的地址空间是个比较抽象的概念,你可以把它想象成一个很大的数组,每个数组的元素是一个字节,而这个数组大小由地址空间的地址长度决定,比如32位的地址空间的大小为2^32=4294967296字节,即4GB,地址空间有效的地址是0~4294967295,用十六进制表示就是0x00000000~0xFFFFFFFF(I)。地址空间分两种:虚拟地址空间(Virtual Address Space)和物理地址空间(Physical Address Space)。物理地址空间是实实在在存在的,存在于计算机中,而且对于每一台计算机来说只是惟一的一个,你可以把物理空间想象成物理内存,比如你的计算机用的是Inter的Pentium4的处理器,那么它是32位的机器,即计算机地址线有32条(实际上是36条地址线,不够我们暂时认为它只是32条),那么物理空间就有4GB(物理寻址能力是2^32)。但是你的计算机上只装了512MB的内存,那么其实物理地址的真正有效部分只有0x00000000~0x1FFFFFF(II.),其他部分都是无效的(实际上还有一些外部I/O设备映射到物理空间的,也是有效的,但我们暂时无视其存在)。虚拟地址空间是指虚拟的、人们想象出来的地址空间,其实它并不存在,每个进程都有自己独立的虚拟空间,而且每个进程只能访问自己的地址控件,这样就有效的做到了进程的隔离。

I.2^32-1=2^0+2^1+2^2+...+2^31=(2^0+2^1+2^2+2^3)*(2^0+2^4+2^8+2^12+2^16+2^20+2^24+2^28)=F*(2^0+2^4+2^8+2^12+2^16+2^20+2^24+2^28)=0xFFFFFFFF
II.1k=2^10bytes,1M=2^10M=2^20bytes,1G=2^10M=2^30bytes,.16进制的第六位,也就是2^20,就表示M了,例如1FFFFFF,就表示1M大小,FFFFFF就表示15M,FFFFFFF表示255M,0xA000000=10M,0x6400000=100M,类推,1FFFFFFF就表示(2^8+F*2^4+F)=511M?