C++是否可以自动访问机器中所有可用的内存
Does C++ have automatic access to all the available memory in the machine
我来自一个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;注意,对于你认为"正常"的程序来说,情况从来都不是这样的(我可以告诉你,你不是微控制器或操作系统开发人员)。
相关文章:
- C++尝试深度复制唯一指针时出现内存访问冲突
- 如何使用 MPI 的远程内存访问 (RMA) 功能并行化数据聚合?
- CRTP - 危险的内存访问?
- C++ Python 的扩展 - 安全内存访问和内存布局
- 在Visual Studio中查找非法内存访问
- C++内存访问违反内存大块
- 数组中未映射的内存访问从python传递到c++
- 使用加速进程间创建消息队列 - 内存访问冲突
- C 指针转换会导致内存访问冲突
- 为什么代码会抛出非法内存访问错误
- 多线程环境中C++内存访问
- CUDA 中的递归返回非法内存访问
- 为什么创建进程 API 调用会导致内存访问冲突?
- 在 C++ 中遍历链表比在具有类似内存访问的 Go 中慢
- 确定打开进程的内存访问位置
- 存在内存访问异常,但我不确定我的代码中出了什么问题
- 指向结构的指针的 2D 数组.内存访问问题
- GPU 内存访问和使用 (CUDA)
- 在实时程序中是动态内存访问有害的
- 随机 mmaped 内存访问比堆数据访问慢 16%