单位
- b 表示二进制中的一个比特位(bit)
- B 表示字节(byte),一个字节是由 8 个 bit 组成的,1B = 8b
- kB 表示千字节(kilobyte),1kB = 1024B
在计算机储存单位中最小的是B(字节),一个英文字符需要占用1个字节的空间,一个汉字需要占用2个字节的空间,
其单位之间的换算如下(http://www.elecfans.com/tools/zijiehuansuan.html):
1KB = 1024B
1MB = 1024KB
1GB = 1024MB
1TB = 1024GB
1PB = 1024TB
1EB = 1024PB
1ZB = 1024EB
1YB = 1024ZB
物理基础
对于32 机而言,内存模型线性的,这是硬件基础。
左边表示十六进制的访问地址,右边分别表示寻址的最小单位 Byte和 Byte的最小单位 bit,1Byte = 8bit。如下图
可以从上图中看到每1小格就是1bit, 8个连续小格就是1Byte, 每个bit上存储的是0 || 1。从图中可以看出最大是4G-1
int abc = 1;
printf("abc = %d\n", sizeof(abc)); //abc = 4
abc在内存中占4个字节 表示:00000000 00000000 00000000 00000001
CPU读写内存
CPU在运作时,读取内存数据要指定存储单元地址,就是要确定读写哪些数据,即要明确三件事:
- 地址信息 - 存储单元的地址
- 控制信息 - 器件的选择,读or写
- 数据信息 - 读写的数据
地址总线
其中 CUP 通过地址总线要寻址,指定存储单元。可见地址总线上能传送多少个不同的信息,CPU就可以对多少个存储单元进行寻址。
有 10根地址总线,就能传送10 位二进制数据,也就是2 的10 次方 。最小位0,最大为1023。也就是 2n= 最大传输 n = 多少地址总线。
CPU地址总线的宽带决定了CPU的寻址能力。
数据总线
CPU与内存或其他器件时行数据传达是通过数据总线来进行的。8根数据总线一次可以传送8位二进制数据。
16根数据总线一次可以传 2个字节。
数据总线的宽度决定了CPU和外界的数据传输速度。
控制总线
CPU对外部部件的控制时通过控制总线来进行的。
控制总线是个总称,控制总线是有不同的控制线来集合的。
有多少根控制总线,就意味着 CPU 提供了对外部器件的多少种控制。
控制总线的宽带决定了CPU对外部部件的控制能力。
那么32位机最大的寻址能力就是:2^32 = 4G,也就是说32位机时,最大也只能装4G内存。 装了8G也是没用的,识别不了
寄存器(CPU里存储单位)
#include<stdio.h>
#include<stdlib.h>
int main() {
int a = 3;
int b = 4;
int sum = a + b;
system("pause");
return 0;
}
003C120C rep stos dword ptr es:[edi]
int a = 3;
003C120E mov dword ptr [a],3
int b = 4;
003C1215 mov dword ptr [b],4
int sum = a + b;
003C121C mov eax,dword ptr [a]
003C121F add eax,dword ptr [b]
003C1222 mov dword ptr [sum],eax
system("pause");
003C1225 mov esi,esp
从上面汇编代码中可以看出 3和4存储在内存中,在进行 sum =a+b,分别把3和4 mov eax(寄存器中CPU里的一种存储单位)进行计算,就是说计算是在CPU里处理的。然后把运算结果再返回给内存。