1、问题如上所示
2、上代码图
3、如果,第一个红标,加入给函数传的参数是数组,并且这个数组会很大的话,那么会不会大量的损耗内存呢?
我本地使用memory_get_usage()方法测试的结果是没有明显的内存变化,但是有大佬说这样传不好,所以有些迷惑。
4、第二个红标
同样的,把一个数组赋值给另一个数组,会不会损耗内存呢?经过本地测试,内存是没变化的。不过听说php有个写时复制也就是在变量赋值给另一个变量时并不会马上分配一个新的内存块,而是当这2个变量不一样时(其中有人变化了),才会重新分配一块内存去单独存放(内存的复制)。
不知道会不会当赋值的数组发生变化的时候,才会引起内存的改变。
主要就是上面两个问题,希望大佬解答下,分数奉上。
当没必要时,php不会去复制已生成的变量容器。向函数传递参数$a是不会增加内存的。只有当传进去的参数$a在函数里面变化时(赋值等操作)才会真正的复制一份数据
模拟读取一个json数组文件,几十K大小,然后for几十次这个功能,就能清楚的看出来耗时和内存消耗了。
自己实测验证下。
start = xx
for xxx
spliceData
end = xxx
echo end - start, memory_useage
当某变量的数据量很大,可以采用引用变量的方式。
例:$a = '字符串长度为10w';
$b = $a; //会重新分配内存内地给$b
$b = &$a; //$b 指向$a 的内存地址,$b 类似于$a的别名