C++是否可以自动访问机器中所有可用的内存

Does C++ have automatic access to all the available memory in the machine

本文关键字:内存 访问 是否 C++ 机器      更新时间:2023-10-16

我来自一个GC VM环境(Clojure),在这个环境中,应用程序可用的内存量是JVM启动时使用的内存量,它总是(通常)比机器上的实际可用内存少得多。

我想知道,作为一种系统编程语言,C++是否会自动访问系统上所有GB的RAM?

我知道堆栈内存区域将受到限制,但堆呢?

例如,考虑一个奇怪的场景,想要一个数亿长的替身列表。一些看似过多的内存分配,如以下所示:

auto pvec=new std::vector<double>(125000000);

如果每个double是8个字节,那么这大约是1GB的内存。在一台有16GB RAM的机器上,这不是问题吗?

我想知道,作为一种系统编程语言,C++是否会自动访问系统上所有GB的RAM?

这不是编程语言的问题,而是内存保护的问题。

在现代计算机上,CPU和操作系统一起实现了所谓的虚拟内存,这是您正在运行的进程的地址范围。在这个地址范围内,物理RAM可以被映射,并且通常只被映射成小块。一个正常的程序从来没有机会访问不属于它自己进程内存映射的内存,而虚拟内存地址对映射到它的物理RAM没有任何说明

然而,如果你使用C++或任何其他语言在没有内存保护的情况下在裸机上进行编码,那么你的程序将可以访问所有的RAM;注意,对于你认为"正常"的程序来说,情况从来都不是这样的(我可以告诉你,你不是微控制器或操作系统开发人员)。