9

我正在 Unix 平台上使用 C++ 开发 Hex 游戏(当前正在运行 c shell)。我的游戏的 AI 需要不到一分钟的时间来决定它的移动(我正在使用一种蒙特卡洛算法),经过几步之后,程序自行终止,只是在返回我之前打印“Killed”命令提示符。有谁了解导致这种情况发生的原因,并对我如何更改代码以修复它有任何建议?如果它有帮助,我没有使用我的系统。我使用 SSH Secure Shell 连接到我学校的服务器。我还应该指出,我不认为我的算法有问题,因为它在崩溃之前按我预期的那样工作,但是在决定它的第 7 步时它总是崩溃。

4

2 回答 2

6

That's the out of memory manager that does that. Most likely you have some sort of memory leak. If you want to continue with the memory leak you can run a script like this in another session. Replace processname with the name of your binary.

#!/bin/bash
while true; do {
    pgrep -x "processname" | while read PID; do {
        echo -1000 > /proc/$PID/oom_score_adj; 
    } done;
} done;
于 2015-06-09T16:01:54.283 回答
0

我不认为我的算法有问题,因为它按我的预期工作

我认为这是问题的症结所在。除了不满足其功能要求之外,算法还有很多“错误”的地方。

特别是,时间复杂度或空间复杂度对于现代硬件来说可能是不可行的。

在您的情况下,您的空间使用量正在爆炸,触发 OOM 杀手。正如最初的响应者所说,它可能是由内存泄漏引起的(但它也可能只是一个“坏”算法,它会表现出相同的行为)。

新的 GUI 程序员经常忘记清除旧的渲染屏幕,所以他们只是相互堆积(巨大的内存泄漏)。这是我要检查的第一件事。

于 2021-06-01T16:59:26.710 回答