我看到很多这样的代码:
function load_items(&$items_arr) {
// ... some code
}
load_items($item_arr);
$v = &$items_arr[$id];
与以下代码进行比较:
function load_items() {
// ... some code
return $items_arr;
}
$item_arr = load_items();
$v = $items_arr[$id];
第二个代码是否会复制items_arr
和$item_arr[$id]
?
第一个代码会导入性能吗?
答案 0 :(得分:2)
不,它不会立即复制该值。写入时复制 是PHP中使用的内存管理方法之一。它确保在变量之间复制值时不会浪费内存。 这意味着当你分配时:
$v = $items_arr[$id];
PHP只会更新符号表以指示$v
指向$item_arr[$id]
的相同内存地址,就在您之后更改$item_arr
或$v
然后PHP分配更多内存,然后执行复制。
通过延迟这个额外的内存分配和复制PHP在某些情况下节省了时间和内存。
有关PHP内存管理的好文章:http://hengrui-li.blogspot.no/2011/08/php-copy-on-write-how-php-manages.html