我正在使用Ubuntu 14.04
和gcc version 4.8.2
。有时当我运行一些C++
有错误的代码时,例如Runtime Error
,它会陷入困境recursion
(我想……)并且我的整个计算机都会冻结。我什么也做不了。Ctrl+C, Ctr+Alt+F1..F7, Mouse
,任何按钮都不起作用。甚至我的电源按钮。所以我必须按住它才能关闭我的电脑。这个 Ubuntu 或 gcc 错误让我很恼火!有人知道如何修复它吗?
我的编译行:g++ -O2 -Wall -pedantic -Wextra
g++版本:g++ (Ubuntu 4.8.2-19ubuntu1) 4.8.2
Ubuntu 版本:Ubuntu 14.04 LTS
我的两台电脑都出现了完全相同的情况。(我的电脑也是如此。我有 2 台ASUS
电脑,我的电脑有DELL
)
答案1
我有时也会遇到同样的问题。这不是由递归本身引起的,而是由 Linux 内存不足引起的。Linux 允许程序分配所需的空间,直到内存完全用完为止。因此,您的机器无法处理原始操作。
Windows 的行为方式略有不同。它会留出一些可用空间以满足其需要。您的代码将出现“内存不足”错误,并且系统运行速度会稍微慢一些,但不会完全冻结。
攻击者也采用同样的思路fork-bomb
,很快耗光系统所有内存,甚至导致killall
系统无法运行。
如果您的程序占用了如此多的内存而不受控制,它很快就会死机,然后 Linux 就可以正常运行。目前唯一能让我加快速度的方法是发送Ctrl-C
到启动代码或尝试运行代码的终端killall
。