php给参数传参给数组以及数组赋值等会不会增大内存的损耗?附代码。

铁柱同学
Golang领域优质创作者
博客专家认证
2019-05-08 01:30:01
1、问题如上所示

2、上代码图



3、如果,第一个红标,加入给函数传的参数是数组,并且这个数组会很大的话,那么会不会大量的损耗内存呢?


我本地使用memory_get_usage()方法测试的结果是没有明显的内存变化,但是有大佬说这样传不好,所以有些迷惑。

4、第二个红标

同样的,把一个数组赋值给另一个数组,会不会损耗内存呢?经过本地测试,内存是没变化的。不过听说php有个写时复制也就是在变量赋值给另一个变量时并不会马上分配一个新的内存块,而是当这2个变量不一样时(其中有人变化了),才会重新分配一块内存去单独存放(内存的复制)。

不知道会不会当赋值的数组发生变化的时候,才会引起内存的改变。

主要就是上面两个问题,希望大佬解答下,分数奉上。
...全文
275 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
铁柱同学 2019-05-08
  • 打赏
  • 举报
回复
引用 5 楼 床上等您 的回复:
[quote=引用 4 楼 李长念 的回复:] [quote=引用 3 楼 床上等您 的回复:] 只要传参,参数都会拷贝一份,所以值越大,耗的内存越大。 传地址就永远是一个地址,与变量值大小无关
这段话让我想起php的那个“写时复制”概念,意思是懂了,多谢回答,还有个小问题,当传地址之后,数组发生了改变,是不是又要重新开辟一块内存给这个已经改变过的数组呢[/quote] 直接改同一个数组。因为内存地址是同一个。[/quote] 好的,谢谢解答,已经懂了
床上等您 2019-05-08
  • 打赏
  • 举报
回复
引用 4 楼 李长念 的回复:
[quote=引用 3 楼 床上等您 的回复:]
只要传参,参数都会拷贝一份,所以值越大,耗的内存越大。
传地址就永远是一个地址,与变量值大小无关


这段话让我想起php的那个“写时复制”概念,意思是懂了,多谢回答,还有个小问题,当传地址之后,数组发生了改变,是不是又要重新开辟一块内存给这个已经改变过的数组呢[/quote]
直接改同一个数组。因为内存地址是同一个。
铁柱同学 2019-05-08
  • 打赏
  • 举报
回复
引用 3 楼 床上等您 的回复:
只要传参,参数都会拷贝一份,所以值越大,耗的内存越大。 传地址就永远是一个地址,与变量值大小无关
这段话让我想起php的那个“写时复制”概念,意思是懂了,多谢回答,还有个小问题,当传地址之后,数组发生了改变,是不是又要重新开辟一块内存给这个已经改变过的数组呢
床上等您 2019-05-08
  • 打赏
  • 举报
回复
只要传参,参数都会拷贝一份,所以值越大,耗的内存越大。
传地址就永远是一个地址,与变量值大小无关
铁柱同学 2019-05-08
  • 打赏
  • 举报
回复
引用 1 楼 床上等您 的回复:
数据量大,并且不会被(被调用方法修改时),可以传地址 &$param
意思是,当这个数组可能发生改变的时候,就尽量不要用传引用的方式传参,问题是这种传参方式会不会有问题呢,当这个数组是万级别的时候,会不会影响性能呢,谢谢解答
床上等您 2019-05-08
  • 打赏
  • 举报
回复
数据量大,并且不会被(被调用方法修改时),可以传地址 &$param

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧