这个递归函数使用超过1.4 MB的RAM,并且它没有被释放。它返回的只是一个int。我怎样才能释放更多的记忆?
function bottomUpTree($item, $depth)
{
if ($depth)
{
--$depth;
$newItem = $item << 1;
return array(
bottomUpTree($newItem - 1, $depth),
bottomUpTree($newItem, $depth),
$item
);
}
unset($depth);
unset($newItem);
return array(NULL, NULL, $item);
}
bottomUpTree(0, 7);
答案 0 :(得分:3)
递归函数总是会占用内存。每次通话都会消耗掉一些,直到你到达底部并开始返回。这是不可避免的。对函数的参数执行unset()
对你没有帮助......它们已经占用了调用堆栈上的空间,并且在函数返回之前无法删除。
一种选择是切换到迭代函数,但这对树结构来说更难。
但最重要的是,这个功能实际上完成了什么?你正在返回数组,但没有将它们分配到调用级别的任何地方,所以你创建了大量数组只是为了立即将它们丢弃。
答案 1 :(得分:0)
让php编译器释放内存的一些技巧是执行以下操作: