指针是如何在具有大量内存的超级计算机中实现的?
How are pointers realized in supercomputers with lots of ram?
我刚刚了解到 c++ 中的指针又是整数。所以我天真的问题是,如果 64 位整数不够大,无法解决所有可能的可用 RAM,会发生什么?在真正的大型超级计算机中,情况难道不是这样吗?
很久以前,16 位的地址空间不足以容纳所有内存或改写,计算机需要更多的内存。
开发的一种方案是将内存拆分为页面。 另一个整数是页码。 因此,要访问内存,您需要一个向量:[页码,地址]。
随之而来的是硬盘,内存被换到硬盘上。 这种交换演变成虚拟内存。 因此,应用程序的内存受到硬盘驱动器容量的限制。
因此,如果计算机需要访问的内存多于指针可以寻址的内存,则可以使用其他方案。
附言,大多数应用程序都不是内存猪。 内存用于保存可执行文件。 大多数操作系统已经具有在内存需要由其他应用程序使用时交换部分可执行文件的技术。
不要忘记使用外部设备作为内存的古老概念,例如磁带驱动器和磁盘。
我刚刚了解到 c++ 中的指针又是整数。
你学错了。 指针和整数是不同的类型。事实上,它们是不同的类型集。有十几种不同的整数类型,以及任意许多指针类型。
C++标准很少说明指针是如何表示的。每个指针类型都有固定的大小,并且与任何其他对象类型一样,指针的表示形式由位组成,因此 N 位指针最多有 2N个不同的值。在许多系统上,指针值可以合理地视为整数,但这不是通用的。在某些(主要是历史的)系统上,指针值可以由两部分组成,一个段号和一个偏移量,我曾经研究过某些指针类型的 3 个低阶位存储在单词顶部的系统。而且不能保证所有指针类型都具有相同的大小,尽管它们通常具有相同的大小。
指针和整数的相似之处在于它们由位组成 - 但所有类型都是由位组成的。
64 位指针类型可以寻址 264个不同的内存地址。在字节寻址系统上,这是16艾字节,远远超过当前任何超级计算机所能拥有的。
如果在将来的某个时候,计算机的可寻址内存大于 264字节,它们只需要使用更大的指针,也许是 128 位。
- 将字符串存储在c++中的稳定内存中
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- Win32编译器选项和内存分配
- 当vector是tje全局变量时,c++中vector的内存管理
- 为什么我能够为阵列分配比计算机实际拥有的内存更多的内存
- 我会导致太多内存泄漏,以至于我的计算机无响应吗?
- 指针是如何在具有大量内存的超级计算机中实现的?
- 在线编译器对计算机内存的影响
- 如何在计算机内存中打印长双重表示的二进制表示
- 在内存中对微型计算机寄存器进行建模
- 静态内存地址是否随不同的计算机而变化
- 通过网络直接从另一台计算机的内存中读取文件
- 这里的计算机内存中发生了什么
- 调试冻结计算机的巨大内存泄漏(C++)
- 根据计算机内存和C++来定义'byte'有什么区别?
- cudaMalloc在使用计算机内存时失败
- 'this'指针存储在计算机内存中的什么位置?
- 如何在linux程序和windows程序之间通过Wine(同一台计算机)共享内存
- 有没有一种方法可以造成超级严重的内存泄漏
- 在c++中更改内存可能会损坏您的计算机