PHP7中的資料型別

ciscopuke發表於2021-09-09

PHP中變數名zval,變數值zend_value。其變數記憶體是透過引用計數管理的,在PHP7中引用計數在value結構中。

變數型別:

標頭檔案在PHP原始碼 /zend/zend_types.h

圖片描述

內部實現:

PHP透過zval這個結構體來表示一個變數,而不同型別的變數值則透過zval嵌入的一個人聯合體表示,即zend_value。

圖片描述

圖片描述

 zend_value是一個聯合體,其程式碼如下:

圖片描述

ast、ptr、zv這些型別只給核心自己使用。

字串:

PHP為字串單獨定義了一個結構:zend_string。在zend_value中透過str指向具體結構。

圖片描述

圖片描述

圖片描述

 

儲存字串內容的val比較特殊。

val並沒有使用char*型別,字串分配時是類似這樣操作的:malloc(sizeof(zend_sting)+字串長度),就是會多分配出一些記憶體來儲存字串內容,這塊多出來的記憶體起始位置就是val。

這樣做的好處可以省去一次記憶體分配(char*),且更有助於記憶體管理。

val中多出來的一個位元組(結構體中為val[1]而不是val[0])用於儲存儲存字串的最後一個字元"

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4369/viewspace-2822058/,如需轉載,請註明出處,否則將追究法律責任。

相關文章