复合类型中的COW(copy on write)

来源:互联网 发布:船长淘宝秒杀辅助器 编辑:程序博客网 时间:2024/05/22 15:03

/*-------------------------------- 复合类型中的COW ----------------------------------------------- */
//-- 复合类型中的COW(copy on write)《仅供参考,不对之处还望提出,谢谢!》
//本文参考http://php-internal.com/book/?p=chapt06/06-06-copy-on-write而写
//如果需要测试本代码,需要安装Xdebug.
//Xdebug可以参考文章http://hi.baidu.com/meimengxuer/blog/item/021bf725eb52661a918f9dc3.html

/*
* 之前我曾经说过变量之间的COW的区别
* 下面把自己在复合类型中的COW所理解的给大家分享下
*
* 由于变量的值存储时候都是存储在zval结构中,为了节约内存于是引入了COW,当变量复制的时候就好比是中学copy试卷答案一样,两个人一起看
* 但是由于其中一个想在答案卷做标记时另一个人不愿意,此时必须在复制一份考卷答案即相当于变量值改变了产生复制一个zval存储结构一样的效果。这就是COW
*
* 对于数组来说,假如有100个元素总共大小为10k的数组,你去复制数组并且改变其中一个,根据上面所说,按理说内存中此时应该多了10k,但是事实上
* 并不是这样的,还是节约资源考虑即数组每个成员都可以看做一个zval即数组本身加上本身的100个成员可以看做101个zval结构,当改变其中一个时候
* 紧紧去复制该zval就可以了,这就是为什么内存中不会多10k大小的原因了,
*
*
*/
//-------------------------看看下面这个例子----------------- //
/**
* $foo ['love'] = 1;
* $bar = &$foo['love'];
* $tipi = $foo;
* $tipi['love'] = '2';
* echo $foo['love'];
*
* 一开始如果不去接触COW可能很多人都会认为输出值为 1 但是令你们失望了值输出为 2
* -------来分析下--------
*
* 看似$foo 与 $tipi 没有任何联系但是,$bar = &$foo['love'],数组中每个成员都会生成一个zval结构,导致'love'结构里面 is_ref 变为1
* 即标记为引用,导致 $tipi = $foo 时候$tipi数组中的'love'中is_ref 值也是为1即,改变$tipi['love']时候$foo['love']也会改变,所以
* 呈现出的结果是2。
* 从下面打印的结果中看,'love'所对应的is_ref都为1。即表明此时的zval结构是处于引用状态,结论可以得出了。
*/
$foo ['love'] = 1;
//xdebug_debug_zval('foo');
$bar = &$foo['love'];
//xdebug_debug_zval('bar');

$tipi = $foo;
$tipi['love'] = '2';
echo "
";
//echo $foo['love'];
//xdebug_debug_zval('tipi');
/*--------------------------------------------------------- */

/*
*打印结果如下:
foo:
(refcount=1, is_ref=0),
array
'love' => (refcount=1, is_ref=0),int 1

bar:
(refcount=2, is_ref=1),int 1


tipi:
(refcount=1, is_ref=0),
array
'love' => (refcount=3, is_ref=1),string '2' (length=1)

*/

原文地址:http://bbs.lampbrother.net/read-htm-tid-119366.html

阅读(58) | 评论(0) | 转发(0) |
0

上一篇:我怀念的

下一篇:Linux shell脚本检测方法-强哥

相关热门文章
  • IP Sec VPN与NAT破镜重圆
  • 网站导航
  • GoAgent图文设置教程
  • UT2.0正式版下载
  • tomcat6.0配置(含配置视频下载...
  • 大家都是用什么来管理hadoop集...
  • 网站被人挂了吗,添加了些程序...
  • Nginx如何保证不走宕机的那个...
  • 大家谈谈MYSQL客户端和服务器...
  • 以下代码运行后为何会输出5?...
给主人留下些什么吧!~~
原创粉丝点击