PHP中Copy on write的意思是在用變量對變量進(jìn)行賦值時(shí),這些相同值的變量指向同一塊內(nèi)存,只有當(dāng)這些指向同一塊內(nèi)存的相同值,和變量中的某一個(gè)變量的值發(fā)生改變的時(shí)候,才需要進(jìn)行變量分離。
PHP中Copy on write的意思是:
寫時(shí)復(fù)制
(Copy-on-Write,也縮寫為COW),顧名思義,就是在寫入時(shí)才真正復(fù)制一份內(nèi)存進(jìn)行修改。 COW最早應(yīng)用在*nix系統(tǒng)中對線程與內(nèi)存使用的優(yōu)化,后面廣泛的被使用在各種編程語言中,如C++的STL等。
在PHP內(nèi)核中,COW
也是主要的內(nèi)存優(yōu)化手段。 在前面關(guān)于變量和內(nèi)存的討論中,引用計(jì)數(shù)對變量的銷毀與回收中起著至關(guān)重要的標(biāo)識(shí)作用。 引用計(jì)數(shù)存在的意義,就是為了使得COW可以正常運(yùn)作,從而實(shí)現(xiàn)對內(nèi)存的優(yōu)化使用。
寫時(shí)復(fù)制優(yōu)點(diǎn):
是通過賦值的方式賦值給變量時(shí)不會(huì)申請新內(nèi)存來存放新變量所保存的值,而是簡單的通過一個(gè)計(jì)數(shù)器來共用內(nèi)存,只有在其中的一個(gè)引用指向變量的值發(fā)生變化時(shí)才申請新空間來保存值內(nèi)容以減少對內(nèi)存的占用。
從PHP底層基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)來看
ref_count和is_ref是定義于zval結(jié)構(gòu)體中;
is_ref標(biāo)識(shí)是不是用戶使用 & 的強(qiáng)制引用;
ref_count是引用計(jì)數(shù),用于標(biāo)識(shí)此zval被多少個(gè)變量引用,即寫時(shí)復(fù)制的自動(dòng)引用,為0時(shí)會(huì)被銷毀。
相關(guān)學(xué)習(xí)推薦:PHP編程從入門到精通