复合类型中的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
上一篇:我怀念的
下一篇:Linux shell脚本检测方法-强哥
- IP Sec VPN与NAT破镜重圆
- 网站导航
- GoAgent图文设置教程
- UT2.0正式版下载
- tomcat6.0配置(含配置视频下载...
- 大家都是用什么来管理hadoop集...
- 网站被人挂了吗,添加了些程序...
- Nginx如何保证不走宕机的那个...
- 大家谈谈MYSQL客户端和服务器...
- 以下代码运行后为何会输出5?...
- 复合类型中的COW(copy on write)
- Linux系统中的copy-on-write(COW)技术
- Copy-on-write(COW)
- linux的COW(Copy-On-Write)
- COW(copy on write)探析
- Snapshot:COW(copy on write)
- 理解 shared_ptr实现copy-on-write(COW)
- COW copy on write linux 开博啦。哈哈
- Copy-On-Write COW 技术简介
- 写时拷贝(copy-on-write) COW技术
- PHP学习:foreach的深入 和COW(copy-on-write )的验证
- C++ string 类 部分成员函数实现(实现COW copy-on-write)
- babyos2(13)——进程页表,fork, COW(copy on write)
- Linux写时拷贝技术(copy-on-write)--COW
- 数组指针特例-写时复制cow(copy on write)
- COW(copy on write), SSO (small string optimization)浅析
- PHP中的写时复制(Copy On Write)
- Java中的Copy-On-Write容器
- 我的求职简历,大家看看给个意见吧
- 随记
- 先人一步(小高读书笔记第一季)
- 我怀念的
- HDU 2094 产生冠军
- 复合类型中的COW(copy on write)
- Linux shell脚本检测方法-强哥
- 比FastMethod更快的Java反射调用API,以及比Cglib更快的BeanMap实现
- java clone方法使用详解
- JSONP实现Ajax跨域访问-强哥
- PHP你可能不知道的几件事
- linux终端有颜色字体
- 省时省力 Shell小技巧一则
- Classes/Object 函数