[PHP] PHP5中的写时复制change on write
2023-02-18 15:41:18 时间
php变量在赋值的时候是增加的引用计数,并不是又创建了一块内存空间
但是当新的变量值变更时 , 值从新赋予新的值时 , 就会减掉刚才的引用计数,并且从新创建内存空间.
上面的内容是显而易见的,重新赋值自然会重新创建内存空间,但是有一种情况也会发生这样的事 , 那就是在使用到引用符&的时候 , 也会发生复制.
例如下面的代码:
<?php $a="shihan"; $b=$a; $c=$a; xdebug_debug_zval('a','b');
a: (refcount=3, is_ref=0)='shihan'
b: (refcount=3, is_ref=0)='shihan'
$a="shihan"; $b=&$a; $c=$a; xdebug_debug_zval('a','b');
a: (refcount=2, is_ref=1)='shihan'
b: (refcount=2, is_ref=1)='shihan'
下面这个$b=&$a会产生复制 , 当进行函数传参时 , 内容占用增大
<?php $a="shihan"; $b=&$a; $c=$a; function test2($d){} test2($b); xdebug_debug_zval('a','b'); var_dump(memory_get_usage());//633208 <?php $a="shihan"; $b=$a; $c=$a; function test2($d){} test2($b); xdebug_debug_zval('a','b'); var_dump(memory_get_usage());//633128
当没有在函数内部更改这个值的需求时 , 不要用引用
相关文章
- HMS Core使能AI智慧体验,共建创新应用生态
- 移动应用开发迎来哪些新技术?5月24日相约HDD·线上沙龙·创新开发专场
- 【FAQ】申请华为运动健康服务授权的4个常见问题及解决方法
- 调用推送接口返回成功,手机端未收到通知栏消息,该如何自检?
- 最长支持5小时!实时语音转写,直播也能同步字幕
- 运动健康者的福音,拍照即可获取食物卡路里和营养元素啦
- 日调用量超600亿次,HMS Core HiAI Foundation助力AI应用高效开发
- HMS Core地理围栏能力助你实现指定范围人群的精准消息推送
- 华为音频编辑服务实时变声,大叔音怪兽音随意变换
- HMS Core分析服务助您掌握用户分层密码,实现整体收益提升
- 全场景AI推理引擎MindSpore Lite, 助力HMS Core视频编辑服务打造更智能的剪辑体验
- 开发者问第一期问答分享来啦
- 上新啦!KIT!
- 【有奖调研】华为分析服务诚邀您参与,您的真实反馈可以让我们变得更好!
- 有奖调研 | 即时消息服务的产品需求规划就交给你了!
- 迁移学习(DANN)《Domain-Adversarial Training of Neural Networks》
- 【FAQ】接入HMS Core地图服务过程中常见问题总结
- 论文解读(CAN)《Contrastive Adaptation Network for Unsupervised Domain Adaptation》
- HMS Core电商解决方案之商品3D商品展示
- HMS Core Discovery第14期回顾长文|纵享丝滑剪辑,释放视频创作力