单位

  • b 表示二进制中的一个比特位(bit)
  • B 表示字节(byte),一个字节是由 8 个 bit 组成的,1B = 8b
  • kB 表示千字节(kilobyte),1kB = 1024B

在计算机储存单位中最小的是B(字节),一个英文字符需要占用1个字节的空间,一个汉字需要占用2个字节的空间,

其单位之间的换算如下(http://www.elecfans.com/tools/zijiehuansuan.html):

  1. 1KB = 1024B
  2. 1MB = 1024KB
  3. 1GB = 1024MB
  4. 1TB = 1024GB
  5. 1PB = 1024TB
  6. 1EB = 1024PB
  7. 1ZB = 1024EB
  8. 1YB = 1024ZB

物理基础

对于32 机而言,内存模型线性的,这是硬件基础。

左边表示十六进制的访问地址,右边分别表示寻址的最小单位 Byte和 Byte的最小单位 bit,1Byte = 8bit。如下图

计算机存储原理 - 图1

可以从上图中看到每1小格就是1bit, 8个连续小格就是1Byte, 每个bit上存储的是0 || 1。从图中可以看出最大是4G-1

  1. int abc = 1;
  2. 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里存储单位)

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. int main() {
  4. int a = 3;
  5. int b = 4;
  6. int sum = a + b;
  7. system("pause");
  8. return 0;
  9. }
  10. 003C120C rep stos dword ptr es:[edi]
  11. int a = 3;
  12. 003C120E mov dword ptr [a],3
  13. int b = 4;
  14. 003C1215 mov dword ptr [b],4
  15. int sum = a + b;
  16. 003C121C mov eax,dword ptr [a]
  17. 003C121F add eax,dword ptr [b]
  18. 003C1222 mov dword ptr [sum],eax
  19. system("pause");
  20. 003C1225 mov esi,esp

从上面汇编代码中可以看出 3和4存储在内存中,在进行 sum =a+b,分别把3和4 mov eax(寄存器中CPU里的一种存储单位)进行计算,就是说计算是在CPU里处理的。然后把运算结果再返回给内存。