(一个内存地址能存多少)我电脑里的RAM能容纳多少个内存地址?

(一个内存地址能存多少)我电脑里的RAM能容纳多少个内存地址?

我电脑里的RAM能容纳多少个内存地址?

有时候,查看计算经验的表面级别是很有趣的,而其他日子,深入研究内部工作是很有趣的。今天,我们来看看计算机内存的结构,以及您可以将多少东西打包到一个RAM中。

今天的问答环节是由超级用户提供的,这是Stack Exchange的一个细分部门,这是一个由社区驱动的Q&A网站分组。

问题

超级用户读取器JohanSmohan正在努力解决处理器类型和内存大小如何协同工作以生成总地址。他写道:

使用32位处理器和1GB内存可以获得多少个内存地址,使用64位处理器可以得到多少个内存地址?

我想是这样的:

1GB的RAM除以32位4位(?)才能得到内存地址的数目?

我在维基百科上读到,一个内存地址是32位宽或4位字节(1位字节=8位),而64位处理器中有1个内存地址或1个整数是64位宽或8位字节。但我也不知道我是否正确地理解了它。

这些问题可以让一个好奇的极客在晚上熬夜。在Johan的假设系统中,有多少个地址可用?

答案

超级用户贡献者Gronostaj对RAM的划分和使用提供了一些见解:

简短答覆:可用地址的数目等于较小的地址:

  • 内存大小(以字节为单位)
  • 最大的无符号整数,可以保存在cpu的机器字中。

对上述问题的详细答复和解释如下:

内存由字节(B)组成。每个字节由8位(B)组成。

1 B = 8 b

1GB的RAM实际上是1GIB(千兆字节,而不是千兆字节)。不同之处是:

1 GB  = 10^9 B = 1 000 000 000 B

1 GiB = 2^30 B = 1 073 741 824 B

每个字节的内存都有自己的地址,不管CPU机器字有多大。例如。Intel 8086 CPU是16位的,它是按字节寻址内存的,现代32位和64位CPU也是如此。这就是第一个限制的原因--您不能有比内存字节更多的地址。

内存地址只是CPU必须从内存开始跳过的字节数,才能到达它想要的内存地址。

  • 要访问第一个字节,它必须跳过0字节,所以第一个字节的地址是0。
  • 要访问第二个字节,它必须跳过1字节,所以它的地址是1。
  • (以及…)
  • 要访问最后一个字节,cpu跳过1073741823字节,因此其地址为1073741823。

现在你必须知道32位到底是什么意思。正如我前面提到的,它是机器字的大小。

机器字是CPU用来保存数字的内存数量(在RAM、缓存或内部寄存器中)。32位CPU使用32位(4字节)来保存数字.内存地址也是数字,所以在32位CPU上,内存地址由32位组成.

现在想一想:如果您有一位,您可以在上面保存两个值:0或1。再加一位,您就有四个值:0,1,2,3。在三位上,您可以保存8个值:0,1,2…。6,7.这实际上是一个二进制系统,它的工作方式如下:

Binary  Decimal

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

10 1010

11 1011

12 1100

13 1101

14 1110

15 1111

它的工作原理与通常的加法完全一样,但最大数字是1,而不是9.十进制0是0000,然后添加1并得到0001,再加一次,你就有了0010。这里发生的事情就像有了十进制09然后添加一个:将9改为0,并增加下一个数字。

从上面的示例中可以看到,始终有一个最大值可以保持在一个位数不变的数字中--因为当所有位数为1,并且您试图将值增加1时,所有位都将变为0,从而破坏了该数。它被称为整数溢出,对用户和开发人员都会造成许多不愉快的问题。

   11111111    = 255

+ 1

-----------

100000000 = 0 (9 bits here, so 1 is trimmed)

  • 对于1位,最大值是1,
  • 2位-3位,
  • 3位-7位,
  • 4双边投资条约-15

最大的可能数总是2^N1,其中N是位数.正如我前面所说,内存地址是一个数字,它也有一个最大值。这就是为什么机器字的大小也是对可用内存地址数量的限制--有时CPU无法处理足够大的数字来寻址更多的内存。

因此,在32位上,您可以将数字从0保持到2^32-1,这是4 294 967 295。它超过了1GB RAM中的最大地址,因此在特定情况下,RAM的数量将是限制因素。

理论上,32位CPU的RAM限制为4GB(2^32),64位CPU的RAM限制为16 EB(EB=2^30 GB)。换句话说,64位cpu可以处理整个internet…。200倍;)(按WolframAlpha估计)。

然而,在现实的操作系统中,32位CPU可以处理大约3 GIB的RAM.这是因为操作系统的内部架构-一些地址是为其他目的预留的。你可以在维基百科上读到更多关于这个所谓的3GB屏障的信息。您可以通过物理地址扩展来取消此限制。

谈到内存寻址,有几件事我应该提及:虚拟存储器, 分割和寻呼.

虚拟存储器

正如@DanielRHicks在另一个答案中指出的那样,OSes使用虚拟内存。这意味着应用程序实际上不是在实际内存地址上工作,而是在操作系统提供的地址上操作。

这种技术允许操作系统将一些数据从RAM移动到所谓的Pagefile(Windows)或交换(*Nix)。HDD比RAM慢几个数量级,但是对于很少被访问的数据来说,它不是一个严重的问题,它允许OS提供比实际安装的更多的RAM应用程序。

寻呼

到目前为止,我们讨论的是所谓的平面寻址方案。

分页是一种可供选择的寻址方案,它允许使用平面模型中的一个机器字来寻址更多的内存。

想象一下,一本书里满是四个字母的单词。假设每页上有1024个数字。要解决一个数字,你必须知道两件事:

  • 打印该单词的页数。
  • 那个页面上的哪个词是你要找的。

现在,这正是现代x86 CPU处理内存的方式。它分为4个Kib页面(每个1024个机器单词),这些页面都有数字。(实际上,页面也可以是4 MIB大或2 MIB与PAE)。当您想要寻址内存单元格时,您需要该页中的页码和地址。请注意,每个内存单元格被精确地引用一对数字,这不是分割的情况。

分割

这个和分页很相似。它被用于Intel 8086,举一个例子。地址组现在称为内存段,而不是页。不同的是片段可以重叠,而且它们确实有很多重叠。例如,在8086上,大多数存储单元可以从4096个不同的片段中获得。

例如:

假设我们有8个字节的内存,除了等于255的第4个字节之外,所有内存都保持着零。

平面内存模型的说明:

 _____

| 0 |

| 0 |

| 0 |

| 255 |

| 0 |

| 0 |

| 0 |

| 0 |

-----

分页内存图解4字节页:

 PAGE0

_____

| 0 |

| 0 |

| 0 | PAGE1

| 255 | _____

----- | 0 |

| 0 |

| 0 |

| 0 |

-----

分段内存图解4字节段移动1:

 SEG 0

_____ SEG 1

| 0 | _____ SEG 2

| 0 | | 0 | _____ SEG 3

| 0 | | 0 | | 0 | _____ SEG 4

| 255 | | 255 | | 255 | | 255 | _____ SEG 5

----- | 0 | | 0 | | 0 | | 0 | _____ SEG 6

----- | 0 | | 0 | | 0 | | 0 | _____ SEG 7

----- | 0 | | 0 | | 0 | | 0 | _____

----- | 0 | | 0 | | 0 | | 0 |

----- ----- ----- -----

如您所见,第四个字节可以通过四种方式寻址:(从0寻址)

  • 段0,偏移量3
  • 部分1,抵消2
  • 第2部分,抵消1
  • 第3段,偏移距0

它总是同一个内存单元。

在实际实现中,段移动超过1字节(对于8086是16字节)。

分段的坏处在于它很复杂(但我想您已经知道了;)更好的是,您可以使用一些聪明的技术来创建模块化程序。

例如,您可以将某个模块加载到一个段中,然后假装该段比实际小(仅足够小到足以容纳该模块),然后选择第一个不与伪小段重叠的段,然后加载下一个模块,依此类推。基本上,这样做就是变大小的页面。


在解释中有什么要补充的吗?在评论中发出声音。想从其他精通技术的Stack Exchange用户那里读到更多答案吗?请看这里的完整讨论主题。

以上是 (一个内存地址能存多少)我电脑里的RAM能容纳多少个内存地址? 的全部内容, 来源链接: utcz.com/wiki/670157.html

回到顶部