国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP底層分析:關于強制分裂

劉明 / 1986人閱讀

摘要:前面寫過一篇底層分析關于寫時復制今天來講講關于強制分裂的知識,簡單來說,強制分裂就是在引用變量主動賦值前,該變量傳值賦值過,就會發生強制分裂。實際開發基本用不到這層原理,但在面試中強制分裂通常會和寫時復制一起考。

學習需要知其然而知其所以然,PHP底層相關就是這類知識。

前面寫過一篇《PHP底層分析:關于寫時復制(cow)》:https://segmentfault.com/a/1190000004926603
今天來講講關于強制分裂的知識,簡單來說,強制分裂就是”在引用變量主動賦值前,該變量傳值賦值過,就會發生強制分裂。”

話說起來比較繞,看下代碼解析吧。

看下面的代碼:

稍微熟悉 PHP:&引用符號都應該可以看出,output分別為gzchen,傍晚八點半,gzchen。

那么我們來看看以上代碼的底層運行流程吧。

眾所周知,一個變量就是一個結構體,長成下面這樣:

每一行都寫了注釋,此文件在zend.h在PHP源碼Zend的目錄下。

當代碼運行到line:3[$name = ‘傍晚八點半’]的時候,內存中的結構體長這樣:

當代碼運行到line:4[$myName = $name]的時候,結構體變成這樣:


運行到line:5[$nameCopy = &$name]和line:[$nameCopy = ‘gzchen’],是這樣:

△△△此處,此處,就是此處發生了強制分裂。

當is_ref__gc[引用屬性]從0->1,如果refcont_gc>1,那么就會發生強制分裂。偽代碼就是:

這個就是強制分裂。原本已經經過傳值賦值的變量,再次引用賦值出去。被傳值賦值的變量就會被分裂出一個結構體,在這里是$myName。

實際開發基本用不到這層原理,但在面試中強制分裂通常會和寫時復制(cow)一起考。

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21516.html

相關文章

  • foreach遍歷過程中的奇怪現象(PHP5)

    摘要:中基礎中的三大坑,遍歷,引用機制,數組。今天我們在講講中的一些奇怪現象。本文適合有一定基礎的。運行流程共用一個結構體開始遍歷數組,進行判斷,拷貝數組是一個新的結構體,操作的是新的結構體。那么遍歷數組時,全程與原數組無關。 PHP中基礎中的三大坑,foreach遍歷,引用機制&,數組。 今天我們在講講foreach中的一些奇怪現象。 在講解之前,可以先看看我其他相關的文章,屬于同一個大的...

    kgbook 評論0 收藏0
  • PHP_底層分析

    摘要:將會產生強制分裂結構體結構體引用數組時的一些奇怪現象引用數組時的怪現象數組不會比較細致的檢查,多維數組存在。因此,判斷的時候,只會判斷外面一層的結構體。中底層都離不開表。底層所有的變量都是放在中。 PHP編譯特點 編譯型語言 對于C語言,C++,編譯成機器碼(二進制)來運行。Java語言,把.java 編譯成.class, 稱為bytecode(字節碼),由jvm來運行 解釋型語言 解...

    tomlingtm 評論0 收藏0
  • PHP底層分析關于寫時復制(cow)

    摘要:可以看到,該結構體存儲了關于變量值,有幾個變量指向該結構體,變量類型,是否為引用變量等信息。這個就是寫時復制,在作怪,他沒有在賦值的時候就分裂成兩個結構體,而是在我們改寫其中一個變量時發生效果,屬于一種慢復制也稱慢分裂。 想要走到技術的天花板,那么學習過程中在于知其然且知其所以然。 今天我們來討論一下PHP底層的寫時復制(也稱寫時分裂)。 首先我們先來看看一段代碼:showImg(ht...

    widuu 評論0 收藏0
  • 淺談asch系統的共識機制與容錯性

    摘要:從外因的角度來說,系統應該能夠容忍黑客攻擊受托人作弊的情況。這里的黑客攻擊不是說,造成的后果最多是部分服務器宕機,我們已經歸到內因里去了,這里的黑客攻擊主要是指通過入侵拿到部分受托人密鑰并獲取權限,然后利用這些權限獲利。 0 前言 我曾分析了DPOS算法的漏洞并且模擬了一個簡單的攻擊的方法,然后實現了一個簡化的PBFT算法模型試圖去修復該漏洞,并且對比了效果。 隨后在正式的產品中實現了...

    Gu_Yan 評論0 收藏0

發表評論

0條評論

劉明

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<