内存地址
一个内存地址=一个内存单元=一个字节
(一个地址表示的是一个8bit空间)
(不论这个地址有多少位,表示地址的位数和CPU的位有关:
CPU只能寻址16位(16根地址线),所以用4位十六进制表示地址,CPU只能寻址32位(32根地址线),所以用8位十六进制。一位十六进制表示四位二进制。)
内存大小
32/64位操作系统就是和CPU的位数有关,CPU的位数是指CPU一次性可以处理数据或指令的能力。例如8位的CPU,一次只能处理一个8位的数据或者一个8位的指令。
位的单位是bit,字节的单位是byte。1byte=8bit,1字节=8位。
地址总线的位宽决定了CPU的寻址能力有关。位宽就是位数、宽度。
因为计算机内部是以二进制表示的,所以,
32位(bit)处理器(cpu)的寻址能力最大为:
(以字节为单位,找到一位也就找到了一字节,因为字节是最小单元)
实际上就是2的32次方个8bit,等于232Byte,
232(Byte)=210 * 210 * 210 * 22(Byte)=4GB
所以常说32位操作系统最多支持4GB内存,64位操作系统同理。
注意区分:
1MB/s(兆字节/秒)=8Mbps(兆位/秒)
1MB/s=8Mbps
个人理解:。。。 。。。
大端小端
32bit宽的16进制 0x12345678 在内存中的存放方式:
大端: 高字节存储在低地址,低字节存储在高地址
| 内存地址 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
|---|---|---|---|---|
| 存放内容 | 0x12 | 0x34 | 0x56 | 0x78 |
小端: 低字节存储在低地址,高字节存储在高地址
| 内存地址 | 0x1000 | 0x1001 | 0x1002 | 0x1003 |
|---|---|---|---|---|
| 存放内容 | 0x78 | 0x56 | 0x34 | 0x12 |
堆向高地址扩展,栈向低地址扩展。
windows上内存是中间向两头增长,linux上的内存是两头向中间增长。