我正在尝试分配所有可用的RAM。我期待我的计算机开始运行不佳,但在Visual Studio中使用以下程序没有任何不妥。
int main()
{
while (true)
{
int* i = new int[1000];
}
return 0;
}
这个程序甚至都无穷无尽。它很快就结束了。为什么?我期待看到内存使用量增长,然后谁知道是什么。
我甚至试过这个,但仍然没有问题:
int main()
{
while (true)
{
int* i = new int[1000];
for (int k = 0; k < 1000; ++k)
i[k] = k;
}
return 0;
}
它有点工作并说&#34;按任意键......&#34;。怎么了?
答案 0 :(得分:1)
最终您将使用所有内存和交换文件 - 但您需要使用64位编译器和64位设置, 否则,当你可以分配2gb(或4?不记得)时,新的最终会失败。
答案 1 :(得分:1)
当然,如果您分配了所有计算机的RAM,那么您的计算机将会失败。如果您正在运行泄漏/膨胀的软件,例如停止运行的计算机并不罕见谷歌浏览器。在Linux系统上,当可用内存耗尽时,您可以触发进程的自发谋杀。
如果你期望像火一样的东西,你将不得不使用一个不能完成其工作的操作系统,以及一个......我不知道的CPU,它有一个非常严重的错误。我猜你也可能想要一个犯罪危险且被市场禁止的PSU。
无论如何,为了达到这一点,你需要:
你永远不会让程序“无限地”运行。没有什么能“无限地”运行。
答案 2 :(得分:1)
刚刚在ubuntu 15.10(64)上进行了实验。系统正常运行足够长的时间让我运行“系统监视器”。 (应该先做,哎呀)
系统监视器报告了ram使用几秒钟的增长,直到所有可用的ram填充(~3.9G),然后(大约15秒)系统似乎锁定...鼠标指示器停止跟踪鼠标移动,并且键盘输入似乎被忽略(但可能已在某处排队),甚至系统监视器更新似乎停止。
我猜是明显的'锁定'是因为4 GByte交换开始填充和颠簸。
一两分钟后,我的不耐烦赢了,我强行重启。
我之前看过这种行为,今年早些时候。我认为这是一个Firefox问题,但我无法重现。