我正在Unix平台上使用C ++中的Hex游戏(目前正在运行c shell)。我的游戏的AI需要不到一分钟的时间来决定它的移动(我使用的是一种蒙特卡罗算法),经过几个步骤,程序自行终止,只是打印“Killed”才返回我的命令提示符。有没有人理解导致这种情况发生的原因,并对如何更改我的代码进行修复提出任何建议?如果它有帮助,我没有使用我的系统。我使用SSH Secure Shell连接到学校的服务器。我还应该指出,我不认为我的算法有问题,因为它可以像我预期的那样直到崩溃,但它在决定第7步时一直崩溃。
答案 0 :(得分:2)
那是内存管理器那样做的。很可能你有某种内存泄漏。如果您想继续内存泄漏,可以在另一个会话中运行这样的脚本。将processname替换为二进制文件的名称。
#!/bin/bash
while true; do {
pgrep -x "processname" | while read PID; do {
echo -1000 > /proc/$PID/oom_score_adj;
} done;
} done;
答案 1 :(得分:0)
如果用户或系统管理员没有杀死内核可能拥有的程序。内核只会在特殊情况下终止进程,例如极端资源匮乏(想想内存+交换耗尽)。
答案 2 :(得分:0)
我不认为我的算法有问题,因为它按我的预期工作
我认为这是问题的症结所在。除了不满足其功能要求之外,算法还有很多可能“错误”的地方。
特别是,时间复杂度或空间复杂度对于现代硬件来说是不可行的。
就您而言,您的空间使用量激增,触发了 OOM 杀手。正如原始响应者所说,这可能是由内存泄漏引起的(但它也可能只是一个“坏”算法,会表现出相同的行为)。
新的 GUI 程序员经常忘记清除旧的渲染屏幕,因此它们只会相互堆积(巨大的内存泄漏)。这是我要检查的第一件事。