php 变量赋值、引用以及垃圾回收
来源:互联网 发布:舒尔耳机 知乎 编辑:程序博客网 时间:2024/04/30 00:55
$a = '123';
$b = $a;
此时变量$a和$b,共同指向了同一个内存地址(即存放字符串123的内存地址)。
$b = '456'; 此时当给变量$b从新赋值的时候,才会把变量$b和变量$a分开,把变量$b指向一个新的内存地址。(写时复制技术)
==========================================================================================
$a = '123';
$b = &$a;
此时变量$a和$b,共同指向了同一个内存地址
$b = '456'; 此时$b从新赋值,那么$b所指向的内存中的值由123变成了456,$a和$b指向同一个内存地址,所以变量$a的值也发生了变化。
============================================================================================================
$a = '123';
$b = $a;
$c = &$a;
此时变量$a,$b,$c,共同指向了同一个内存地址
$c = '456'; 此时,给变量$c从新赋值,那么此时会把$c,$a 同 $b 分开,$b还是指向原来的地址,而$a和$c指向了新的地址,同时值修改为了 456
================================================================================================================
$a = '123';
unset($a); 时,会把变量$a从php的变量表中删除掉,并且会释放掉给变量$a所分配的内存空间。
$a = '123';
$b = $a;
unset($a); 时,只会把$a从php的变量表中删除掉,但是$a所指向的内存地址(及存放123的内存地址)并不会被释放掉,因为变量$b,也在指向这个地址,只有当php的任何变量都不指向这个地址时才会把这个地址释放掉
特殊情况:
$a = array(1,2);
$a[] = &$a;
此种情况下,unset($a) ,只是将变量$a在php的变量表中删除,并不会释放掉变量$a所占用的内存,原因是变量$a自身的元素中又指向了变量$a自身所指向的内存地址,此种情况下,php没有办法操作这个变量$a了,这就造成了内存泄漏,php 5.3版本的新的垃圾回收机制就是针对这种情况的,用来回收这种情况下所占用的内存地址。
详细资料:
http://blog.csdn.net/phpkernel/article/details/5732784 变量内部存储
http://blog.csdn.net/phpkernel/article/details/5734743 新的垃圾回收机制
或者查看php手册,手册用也有详细的说明
- php 变量赋值、引用以及垃圾回收
- php垃圾回收之变量
- php变量赋值与引用
- PHP垃圾回收机制之引用计数
- 引用类型赋值为null与加速垃圾回收
- php基础--可变变量、引用赋值
- php变量引用赋值一些知识
- C#垃圾回收和析构函数以及弱引用
- js闭包引用以及垃圾回收探索
- php 垃圾回收机制 写时复制和引用计数
- php的垃圾回收机制——引用计数
- php的垃圾回收机制——引用计数
- PHP垃圾回收之变量的处理及如何进行垃圾回收
- php垃圾回收机制
- php垃圾回收机制
- PHP 垃圾回收机制
- php垃圾回收机制
- PHP垃圾回收机制
- 第一章 学习git战略篇
- 通过AJAX和PHP,提交JQuery Mobile表单(两篇)
- UVa 10340 字符串基础
- Web浏览器中的JavaScript
- 做醉综综邹柞诅着壮壮租籽妆兹卒子专转
- php 变量赋值、引用以及垃圾回收
- LCD,分辨率,密度
- ActionContext和ServletActionContext小结
- zookeeper生成节点、删除节点 For Java
- 云计算架构
- Cocos2d-x 3.2导入到Eclipse后出现The import org.cocos2dx.lib cannot be resolved错误
- ACPI & PCI 学习笔记 1
- Cocos2d-x 2.x 升级为 3.x 常见变化纪录
- python 学习笔记—— __setattr__ __getattr__ __str__