在今天的工作中,我讨论了关于在范围之间传递大数据的拼贴画.神话是,在两个范围之间传递时,引用使用较少的内存/ CPU使用率.我们建立一个合适的概念证明......所以:
function by_return($dummy=null) {
$dummy = str_repeat("1",100 * 1024 * 1024);
return $dummy;
}
function by_reference(&$dummy) {
$dummy = null;
$dummy = str_repeat("1",100 * 1024 * 1024);
}
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
//1 always returns: 105493696/105496656
$nagid = by_return();
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
unset($nagid);
//2 always returns: 105493696/210354184 even if we comment 1st part
by_reference($dummy);
echo memory_get_usage()."/".memory_get_peak_usage()."\n";
unset($dummy);
Run Code Online (Sandbox Code Playgroud)
但似乎通过引用它根据函数"memory_get_peak_usage()"消耗更多内存
如您所见,使用大数据进行返回比使用作为参考要聪明得多,但问题是,为什么?欢迎任何启发:)