如何在具有大量内存的超级计算机中实现指针?

时间:2017-03-23 15:19:05

标签: c++ pointers

我刚学会了c ++中的指针只是整数。所以我天真的问题是,如果64位整数不足以满足所有可能的RAM,会发生什么?在超大型超级计算机中,情况不是这样吗?

2 个答案:

答案 0 :(得分:2)

很久以前,16位没有足够的地址空间用于所有内存或重写,计算机需要更多内存。

开发的一个方案是将内存分成页面。另一个整数是页码。因此,要访问内存,您需要一个向量:[页码,地址]。

随着硬盘驱动器的出现,内存被换成硬盘驱动器。此交换演变为虚拟内存。因此,应用程序的存储器受到硬盘驱动器容量的限制。

因此,如果计算机需要访问的内存超过其指针可以寻址的内存,则可以使用其他方案。

P.S。,大多数应用程序都不是内存生猪。内存用于保存可执行文件。当内存需要被其他应用程序使用时,大多数操作系统已经具有交换部分可执行文件的技术。

不要忘记将外部设备用于内存的古老概念,例如磁带驱动器和磁盘。

答案 1 :(得分:2)

  

我刚学会了c ++中的指针只是整数。

你错了。指针和整数是不同的类型。实际上它们是不同类型的集合。有十几种不同的整数类型,以及任意多种指针类型。

C ++标准对如何表示指针几乎没有说明。每个指针类型都具有固定的大小,并且像任何其他对象类型一样,指针的表示由位组成,因此对于N位指针,最多有2个 N 不同的值。在许多系统上,指针值可以合理地被视为整数,但这不是通用的。在一些(主要是历史的)系统中,指针值可以由两部分组成,即段号和偏移量,并且我已经在一些指针类型的3个低位存储在顶部的系统上工作这个词。并且不能保证所有指针类型具有相同的大小,尽管它们通常都有。

指针和整数的相似之处在于它们是由位组成的 - 但所有类型都是由位组成的。

64位指针类型可以寻址2个 64 不同的内存地址。在一个字节寻址的系统上,这16个exabytes,远远超过目前的任何超级计算机所能提供的。

如果在未来的某个时刻,计算机内置的可寻址内存大于2 64 字节,他们只需要使用更大的指针,可能是128位。