PHP底层分析之关于强制分裂

藏色散人
Freigeben: 2023-04-08 12:56:01
nach vorne
2559 人浏览过

学习需要知其然而知其所以然,PHP底层相关就是这类知识。

推荐:《PHP培训

今天来讲讲关于强制分裂的知识,简单来说,强制分裂就是”在引用变量主动赋值前,该变量传值赋值过,就会发生强制分裂。”

话说起来比较绕,看下代码解析吧。

看下面的代码:

8c189b9572c2495fea7e2dfafeb942b.png

稍微熟悉 PHP:&引用符号都应该可以看出,output分别为gzchen,傍晚八点半,gzchen。

那么我们来看看以上代码的底层运行流程吧。

众所周知,一个变量就是一个结构体,长成下面这样:

ceebbd44751d6286eb697c9f5eaf4ba.png

每一行都写了注释,此文件在zend.h在PHP源码Zend的目录下。

当代码运行到line:3[$name = ‘傍晚八点半’]的时候,内存中的结构体长这样:

a91106ef99ed59f5fd604e44c4ce471.png

当代码运行到line:4[name]的时候,结构体变成这样:

6d0886082695783820c8fc9dcc4b920.png

运行到line:5[Misplaced &name]和line:[$nameCopy = ‘gzchen’],是这样:

e8114bdad804cdd0fada39fed3e11d3.png

此处,此处,就是此处发生了强制分裂。

当is_ref__gc[引用属性]从0->1,如果refcont_gc>1,那么就会发生强制分裂。伪代码就是:

dd3ec3e217193bd0bb3edd330be24d9.png

这个就是强制分裂。原本已经经过传值赋值的变量,再次引用赋值出去。被传值赋值的变量就会被分裂出一个结构体,在这里是$myName。

实际开发基本用不到这层原理,但在面试中强制分裂通常会和写时复制(cow)一起考。

更多编程相关内容,请关注php中文网编程入门栏目!

以上是PHP底层分析之关于强制分裂的详细内容。更多信息请关注PHP中文网其他相关文章!

Verwandte Etiketten:
php
Quelle:segmentfault.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!