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

How are pointers realized in supercomputers with lots of ram?

本文关键字:内存 超级计算机 实现 指针      更新时间:2023-10-16

我刚刚了解到 c++ 中的指针又是整数。所以我天真的问题是,如果 64 位整数不够大,无法解决所有可能的可用 RAM,会发生什么?在真正的大型超级计算机中,情况难道不是这样吗?

很久以前,16 位的地址空间不足以容纳所有内存或改写,计算机需要更多的内存。

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

随之而来的是硬盘,内存被换到硬盘上。 这种交换演变成虚拟内存。 因此,应用程序的内存受到硬盘驱动器容量的限制。

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

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

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

我刚刚了解到 c++ 中的指针又是整数。

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

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

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

64 位指针类型可以寻址 264个不同的内存地址。在字节寻址系统上,这是16艾字节,远远超过当前任何超级计算机所能拥有的。

如果在将来的某个时候,计算机的可寻址内存大于 264字节,它们只需要使用更大的指针,也许是 128 位。