最好不要将 &$ 与大字符串一起使用以节省内存吗?
is it better t use &$ with large strings to save memory?
所以我想知道,为了在一个非常繁忙的服务器上节省一些宝贵的内存分配。
如果我在编译最终输出时有大约 1-5mb 的字符串在我的程序中乱扔,那么通过引用明确地传递它们是否更好?那会不会节省内存?
所以基本上问题是:内存方面哪个更好,A 或 B 是否值得付出努力?
甲:
function something($whoa) {
$whoa .= 'bar';
return $whoa;
}
$baz = 'foo';
$baz = something($baz);
echo $baz;
乙:
function something(&$whoa) {
$whoa .= 'bar';
}
$baz = 'foo';
something($baz);
echo $baz;
是的。
PHP 使用 copy-on-write 因此如果您只是使用它们(例如显示它们)它不会复制您的字符串。但是一旦你开始像在你的函数中那样操作它们,就会制作一个副本并且使用的内存量会增加。
如评论中所述,您可以使用 memory_get_usage()
.
轻松测量
示例:
将制作一个副本(值被操纵,因此将写入一个新的):
function something($whoa) {
$whoa .= 'bar';
return $whoa;
}
不会复制:
function somethingElse($whoa) {
echo $whoa;
return true;
}
所以我想知道,为了在一个非常繁忙的服务器上节省一些宝贵的内存分配。
如果我在编译最终输出时有大约 1-5mb 的字符串在我的程序中乱扔,那么通过引用明确地传递它们是否更好?那会不会节省内存?
所以基本上问题是:内存方面哪个更好,A 或 B 是否值得付出努力?
甲:
function something($whoa) {
$whoa .= 'bar';
return $whoa;
}
$baz = 'foo';
$baz = something($baz);
echo $baz;
乙:
function something(&$whoa) {
$whoa .= 'bar';
}
$baz = 'foo';
something($baz);
echo $baz;
是的。
PHP 使用 copy-on-write 因此如果您只是使用它们(例如显示它们)它不会复制您的字符串。但是一旦你开始像在你的函数中那样操作它们,就会制作一个副本并且使用的内存量会增加。
如评论中所述,您可以使用 memory_get_usage()
.
示例:
将制作一个副本(值被操纵,因此将写入一个新的):
function something($whoa) {
$whoa .= 'bar';
return $whoa;
}
不会复制:
function somethingElse($whoa) {
echo $whoa;
return true;
}