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

标签 c++ memory

<分区>

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

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

我知道栈内存区域会被限制,但是堆呢?

例如,考虑需要几亿长的 double 列表的奇怪场景。一些看似过度的内存分配是这样的:

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

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

最佳答案

I am wondering if, as a system programming language, C++ just automatically has access to all the GB of RAM on a system?

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

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

但是,如果您使用 C++ 或任何其他语言在没有内存保护的裸机上进行编码,那么您的程序将可以访问所有 RAM;请注意,对于您认为的“正常”程序而言,情况绝非如此(我可以告诉您您不是微 Controller 或操作系统开发人员)。

关于c++ - C++是否可以自动访问机器中的所有可用内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34132138/

相关文章:

C++/Boost 模板运行时多态性

caching - super 队列和行填充缓冲区的语义是什么?

c++ - 如果在 C++ 中自动存储的对象没有被调用 exit 销毁,那么离开程序后这个对象会发生什么?

C - 处理共享内存时出现段错误

c++ - 指针有问题?

c++ - 如何使用 boost::any_range 加入多个 boost 范围并作为不带函数的结果返回

c++ - 如何优化解析数据流算法?

c++ - Second Mat 图像显示了 First Mat 图像的结果

java - Android Picasso - 清除缓存但图像仍然存在

c - 在 C 中的 malloc 字符串之前保留元数据是否安全?