【发布时间】:2011-08-17 06:18:59
【问题描述】:
我在 C++ 中使用递归算法实现了一个国际象棋机器人,该程序每次移动评估超过一百万个节点。
随着时间的推移,它占用的内存会超过 1 GIG 的 RAM...
但我真的不需要在我完成移动后之前声明的变量...
那么如何像java的垃圾收集器一样手动刷新栈内存来清除栈上之前声明的变量呢?
更新
我发现我的源码中有这一行:
Move * M = new Move(x1,y1,x2,y2);
pair <Move *, Piece *> pr (M,aPiece);
它在执行移动函数中,该函数在递归中被调用一百万次......
我的问题是,一旦所有的递归完成并且我不再需要这个变量,你将如何清除这个变量,但是当递归正在做它的事情时,我需要那个变量留在内存中?
【问题讨论】:
-
你的递归方法是使用尾调用吗? en.wikipedia.org/wiki/Tail_call
-
@dkackman 在国际象棋程序中极不可能,如果是现代 C++ 编译器会对其进行优化。
-
大声笑我几乎使用了 negascout 算法:en.wikipedia.org/wiki/Negascout
标签: c++ memory memory-management recursion stack