- 假设一台运行着Linux系统的计算机有1GB内存,
- 在C/C++中用 malloc 申请4GB会不会成功?为什么?
- 在Java成员变量中也定义一个4GB的数组。请问会抛出异常吗,为什么?
如果环境是64位的,应该都没有问题,物理内存不够可以使用虚拟内存的(需要确认系统配置的虚拟内存是否足够大)。
对于java,还需要注意两点,一是jre版本也必须是64位的,二是启动时需要用参数指定最大内存大小,因为默认的值比较小。
如果系统是32位的,因为能够使用的最大内存只有4GB,而其中必须分一部分给操作系统使用,所以应用程序能够使用的内存通常只有1~3GB,因此是无法使用到4GB的空间的。
如 代码宇宙 所说,这取决于多个因素。
理论上单进程可以寻址的空间大小取决于硬件设备。
但实际上单进程可使用的内存空间低于理论值,它还取决于操作系统,及应用程序。
总结
在C/C++中用 malloc 申请4GB会不会成功?为什么?
在Java成员变量中也定义一个4GB的数组。请问会抛出异常吗,为什么?
8 回答6.5k 阅读
3 回答832 阅读✓ 已解决
4 回答676 阅读✓ 已解决
2 回答3.4k 阅读
3 回答1.9k 阅读✓ 已解决
1 回答2.1k 阅读✓ 已解决
1 回答1.2k 阅读✓ 已解决
c
运行时你会看到
段错误 (核心已转储)
(我就不提Segmentfault,呵呵!)java
运行时你会看到
## 结论
c: 声明没问题,分配没问题, 使用了就不行
java: 声明没问题,分配都不行,更别说使用了