美文网首页
计算机32和64位数解析

计算机32和64位数解析

作者: 大帅的大帅 | 来源:发表于2020-05-01 17:50 被阅读0次

今天看数组结构,想起来数组的内存连续数据块。 在java在中,在栈上生成,在堆上开辟的内存空间。 简单探究下数据在内存里是如何存取的。
那么数据在计算机中结构是啥。

内存地址

物理内存的都见过,从外观上看,上面的上面是一片片的内存颗粒。表示一组组的存储单元。 在内存片上,颗粒上 分页表 来给内存颗粒编号,来建立内存的连续性。 每块颗粒的都有存储单元,里面存放具体的数据,以方便操作系统的CPU 和磁盘 间的数据交换。

image.png

我们都知道,在计算中,8个bit 等于一个字节。 在内存中,数据以字节为最基本的单位进行存储。当然一个ASCII码就是一个字节。 所有,在内存中,一个英文字母占一个字节,也就是占一个内存地址存储。而在UTF-8编码中,一个汉字占2个字节,也会占用两块内存地址空间。

好了,我们了解了物理内存,我们再看看计算机里的内存如何被使用。在代码中,也经常看到内存地址有两种4位16进制8位16进制表示。

0x0001         #4位16进制
0x00000001 #8位16进制

区别是啥?这是因为不同的硬件平台CPU会根据不同的硬件环境来确定寻址空间的。
因为内存地址仅仅是代表一个数据的地址,无论是物理内存是大是小,都是由最基本的存储单元,8bit 存储也就是1个字节 的存储空间。

那么这些位数区别,表示不同的平台下的CPU对内存空间的寻址能力
例如

  • 8位的51单片机CPU能寻8位16进制的内存地址;
  • 20位8086 CPU能寻20位16进制的内存地址;
  • 32为CPU 能寻 32位16进制的内存地址;
  • 64位CPU 能寻 64位16进制的内存地址;

在写法上,常用8位16进制来表示一个内存的物理地址。

寻址

我们聊了内存空间,聊了CPU 能寻址内存的具体地址。 那么具体的CPU是如何读取内存数据的呢,我们就来聊聊寻址。
说道寻址,就会引出两块:物理寻址和虚拟寻址

物理寻址

物理寻址
在计算系统中,内存被分割成M个连续的一单位字节的地址,每个字节都有一个唯一的物理地址(Physical Address,PA)。第一个字节地址的0,后续逐步加一。CPU 访问内存的方式是根据 物理地址直接找出内存的数据,然后处理内存的数据。

image.png

这是早期的PC的寻址方式,现在有些嵌入式的微处理器也是这种处理方式。 这样会有什么问题呢?有这么几点问题:

  • CPU 还存放物理地址在寄存器中,占用是CPU的额外开销;
  • 每次处理数据,都要轮询物理地址,比较低效;
  • 在多进程中,无法精细化的对内存进行管理。
    因为,随着就发明了比较优化的寻址方式,虚拟寻址。

虚拟寻址

虚拟寻址,就是CPU 会根据内存地址生成一个虚拟地址,CPU 通过虚拟地址访问内存。并把这个工作委托给 MMU (Memory Managerment Unit 内存管理单元 )全权负责。每次访问地址时,MMU 会根据CPU 的指令,把要访问的虚拟地址映射为内存的物理地址。同时,MMU 会根据进程的使用情况,对内存进行管理和维护。

image.png

在内存中地址空间是一个线性的连续空间,虚拟地址是物理地址的映射,虚拟地址的位数,就能表示 CPU能对多大的内存空间进行寻址 。
一个包含 N = 2^n就叫做一个n位的地址空间。 目前操作系统有32位和64位,也就是说有32位和64位虚拟地址。
因为一个虚拟地址 就对应内存地址。那么32位的操作系统,能支持2的32次方的寻址能力,那么能支持的物理内存的地址为:
2^32=4GB。 32位的操作系统,也就是最大支持4GB的内存。
那么64位的操作系统,能支持2的64次方的寻址能力,理论上那么能支持的物理地址为:
2^64=17179869184G=16777216T
所以,大家都知道这个32位和64位的机器区别了吧。

相关文章

网友评论

      本文标题:计算机32和64位数解析

      本文链接:https://www.haomeiwen.com/subject/wpdqghtx.html