PHP 数组变量之写时复制的要点 只有数组才有的概念。
1.如果数组指针位置非法,复制时,会将新数组指针初始化!
2.值传递时,PHP采用了一个COW(写时复制,copy on write)的优化措施!
写时复制的两个要点: (实际开发可以使用reset unset 解决这类问题)
<?php
$arr1 = array('吕布','赵云','典韦');
end($arr1);
next($arr1); //非法了
$arr2 = $arr1; //复制数组
var_dump($arr2);
echo '<br>';
var_dump(current($arr2));//初始化$arr2 // PHP要点:
echo '<br>';
var_dump(current($arr1));//非法false // 1.值传递时,并没有马上为新变量$arr2开辟值空间,而在两个变量都未发生改变之前,还是使用的同一个值空间,
//echo '<br>'; // 注意:current也会发生写操作,导致空间被复制!先current谁,谁是那个新的,数组指针随之初始化
//如果上面两个输出顺序换一下:
//var_dump(current($arr1));//初始化$arr1 // 2.一旦某个变量发生改变,此时会复制值空间,让发生改变的变量去引用新的空间!
//echo '<br>';
//var_dump(current($arr2));//非法false // 第一句输出决定谁发生改变,所以草绿色代码段输出的是$arr2,此时引用新空间的就是$arr2。否则就是$arr1。
echo '<br>';
var_dump(current($arr1)); // 例如:$arr2[]='关羽';输出前决定了$arr2发生改变。所以$arr2引用新空间,复制时,会将新数组指针初始化。
echo '<br>'; // 那么此时非法的就是$arr1。如果$arr1[]='关羽',输出$arr1就是数组初始化的值:第一个元素'吕布'。$arr2非法false
var_dump(current($arr2)); // 简单地说,谁先变,谁就引用新的值空间。 可控的!
foreach 于指针的问题 (不可控的)
1.遍历的是拷贝而不是原数组!
2.只有在原数组发生写操作时,才会真正的拷贝。此时原数组指针停留在当前位置,
如果已经非法,则会初始化!
$arr1 = array('一','二','三');
foreach($arr1 as $key =>$value){
var_dump($key,$value);
if($key == 0){
$arr1[] = 'hero';
}
echo '<br>';
}
var_dump(crrent($arr1));
转载于:https://www.cnblogs.com/echo0821/p/5263774.html
PHP 数组变量之写时复制的要点 只有数组才有的概念。相关推荐
- PHP写时复制, 变量复制和对象复制不同!!!
2016年3月18日 15:09:28 星期五 一直以为PHP对象也是写时复制....... 其实: PHP的变量是写时复制, 对象是引用的 写时复制: $a = $b; 如果$b的内容不改变, $a ...
- siwft 写时复制 Copy-On-Write
写时复制 Copy-On-Write 1 定义 在siwft 标准库中,Array,Dictionary,Set这样的集合类型是通过写时复制来实现的. import Foundationvar a1 ...
- 写时复制(Copy-On-Write)思想在Java中的应用
以下文章来源方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/fuzhongmin05/article/details/117076906 ...
- Linux fork()函数底层CopyOnWrite写时复制实现原理剖析
创建子进程的速度应该是怎么样的? 如果父进程是redis,内存数据比如说有10G,需要考虑的有两个点: ①速度如何 ②内存空间够不够 在Linux中有个系统调用--fork(): ①速度:快 ②空间: ...
- php 垃圾回收机制----写时复制和引用计数
PHP使用引用计数和写时复制来管理内存.写时复制保证了变量间复制值不浪费内存,引用计数保证了当变量不再需要时,将内存释放给操作系统. 要理解PHP内存管理,首先要理解一个概念----符号表. 符号表的 ...
- 写时复制,写时拷贝,写时分裂,Copy on write
2019独角兽企业重金招聘Python工程师标准>>> 写时复制,写时拷贝,写时分裂 (Copy-on-write,简称COW)是计算机资源管理方面的一种优化技术,有着广泛的应用,比 ...
- 实战并发编程 - 05等效不可变对象CopyOnWriteArrayList适用场景剖析_写时复制COW
文章目录 Pre 等效不可变对象 实例变量array就是一个等效不可变对象? 写时复制机制 写时复制的目的 优点 缺点 CopyOnWriteArrayList的使用场景 小结 Pre 本篇文章我们分 ...
- Linux-Copy On Write写时复制机制初探
文章目录 生猛干货 COW概述 *Unix fork 函数族exec( ) 为什么有了COW? COW 原理 COW的优缺点 小结 搞定Linux核心技术 生猛干货 从系统安装到程序员必备的Linux ...
- Java源码解读--CopyOnWriteList写时复制集合容器
加元素时复制,适用于写少读多的场景. 读的时候不加锁,写的时候加锁.Vector的实现是不论读写都加锁. 写的时候复制出一个新的数组,将新添加的元素添加进新的数组,然后将引用指向新的数组地址,因此写的 ...
最新文章
- Java之——利用Comparator接口对多个排序条件进行处理
- 基于可靠消息方案的分布式事务(四):接入Lottor服务
- hadoop 2.7.3 java_java - Hadoop 2.7.3 Java运行时错误 - 找不到core-site.xml - 堆栈内存溢出...
- split函数python 未定义_Python之Split函数
- Android ViewFlipper实现多个布局手势切换的效果
- Promolike Qualtrics Dashboard
- SecureCRT 配置文件中 找密码
- [C++11]通过using定义基础类型和函数指针别名
- 【数据结构基础笔记】【栈】
- 鼓励参与计算机考试宣传标语,诚信考试的宣传标语(精选60条)
- java将图片(jpg/bmp/png)转16位bmp(RBG565)
- android快速点击分析
- ae中心点重置工具_如何使用AE制作文字破碎动画?制作ae破碎文字特效教程分享...
- [ POI 2005 ] Bank Notes
- 家庭洗车APP --- Androidclient开展 之 网络框架包介绍(一)
- java毕业设计新能源汽车故障分析2021Mybatis+系统+数据库+调试部署
- vue项目目录详细解读
- 22:紧急措施http://noi.openjudge.cn/ch0107/22/
- pandas学习-变形-task15
- 时光穿梭机(删除文件)