C++ C++;自动访问机器中的所有可用内存
我来自一个GC-VM环境(Clojure),在这个环境中,应用程序可用的内存量与JVM启动时使用的内存量相同,通常比机器上可用的实际内存要少得多 我想知道,作为一个系统编程语言,C++是否能够自动访问系统上所有的GB? 我知道堆栈内存区域将受到限制,但是堆呢 例如,考虑一个奇怪的场景,想要一张有几亿长的双打列表。有些内存分配似乎过多,如下所示: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的
auto-pvec=new std::vector(125000000)代码>
如果每个double
为8字节,则大约为1 GB内存。在具有16 GB RAM的机器上,这不是问题吗
我想知道,作为一个系统编程语言,C++是否能够自动访问系统上所有的GB?
这不是编程语言的问题,而是内存保护的问题
在现代计算机上,CPU和操作系统一起实现所谓的虚拟内存,它是您正在运行的进程的地址范围。在这个地址范围内,物理RAM可以被映射,并且通常只被映射成小块。一个普通的程序从来没有机会访问不属于自己进程内存映射的内存,而虚拟内存地址对映射到它的物理RAM没有任何说明
如果你使用C++或其他语言在裸机中进行编码,而没有内存保护,那么程序将访问所有RAM;注意,对于你认为“正常”的程序(我可以说你不是一个微控制器或OS开发者),情况从来都不是这样。