Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;自动访问机器中的所有可用内存_C++_Memory - Fatal编程技术网

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

C++ C++;自动访问机器中的所有可用内存,c++,memory,C++,Memory,我来自一个GC-VM环境(Clojure),在这个环境中,应用程序可用的内存量与JVM启动时使用的内存量相同,通常比机器上可用的实际内存要少得多 我想知道,作为一个系统编程语言,C++是否能够自动访问系统上所有的GB? 我知道堆栈内存区域将受到限制,但是堆呢 例如,考虑一个奇怪的场景,想要一张有几亿长的双打列表。有些内存分配似乎过多,如下所示: auto-pvec=new std::vector(125000000) 如果每个double为8字节,则大约为1 GB内存。在具有16 GB RAM的

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

我想知道,作为一个系统编程语言,C++是否能够自动访问系统上所有的GB? 我知道堆栈内存区域将受到限制,但是堆呢

例如,考虑一个奇怪的场景,想要一张有几亿长的双打列表。有些内存分配似乎过多,如下所示:

auto-pvec=new std::vector(125000000)

如果每个
double
为8字节,则大约为1 GB内存。在具有16 GB RAM的机器上,这不是问题吗

我想知道,作为一个系统编程语言,C++是否能够自动访问系统上所有的GB? 这不是编程语言的问题,而是内存保护的问题

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

如果你使用C++或其他语言在裸机中进行编码,而没有内存保护,那么程序将访问所有RAM;注意,对于你认为“正常”的程序(我可以说你不是一个微控制器或OS开发者),情况从来都不是这样。