Zval是PHP中最重要的數(shù)據(jù)結(jié)構(gòu)之一,它包含了PHP中變量的值和類型相關(guān)信息。 zval結(jié)構(gòu)比較簡(jiǎn)單, 由三個(gè)部分組成: 為了更直觀的看下zval的結(jié)構(gòu)及核心字段的取值,我們上張圖。 對(duì)u1.v.type的說明: zval的中zend_value定義如下: 在一個(gè)zval中: 所以一個(gè)zval占用16字節(jié)。相應(yīng)php5中,一個(gè)zval的大小為48字節(jié),的確是巨大的提升。 可根據(jù)zval.u1.v.type直接區(qū)分,無需zend_value參與 直接存儲(chǔ)在zend_value的lval或dval中。 使用zend_value對(duì)應(yīng)的指針,指向其具體的結(jié)構(gòu)。 比如字串類型的結(jié)構(gòu)為 一個(gè)字串變量?jī)?nèi)存組織如下圖所示, zval.value.str指向zend_string結(jié)構(gòu)。 Zval是PHP中最重要的數(shù)據(jù)結(jié)構(gòu)之一,它包含了PHP中變量的值和類型相關(guān)信息。 推薦學(xué)習(xí):《PHP7教程》
1. zval
1.1 zval的結(jié)構(gòu)(zend_types.h)
typedef struct _zval_struct zval;struct _zval_struct { zend_value value; /* value */ union { struct { ZEND_ENDIAN_LOHI_4( zend_uchar type, /* active type */ zend_uchar type_flags, zend_uchar const_flags, zend_uchar reserved) /* call info for EX(This) */ } v; uint32_t type_info; } u1; union { uint32_t var_flags; uint32_t next; /* hash collision chain */ uint32_t cache_slot; /* literal cache slot */ uint32_t lineno; /* line number (for ast nodes) */ uint32_t num_args; /* arguments number for EX(This) */ uint32_t fe_pos; /* foreach position */ uint32_t fe_iter_idx; /* foreach iterator index */ } u2;};
1.2 zend_value
typedef union _zend_value { zend_long lval; /* long value */ double dval; /* double value */ zend_refcounted *counted; zend_string *str; zend_array *arr; zend_object *obj; zend_resource *res; zend_reference *ref; zend_ast_ref *ast; zval *zv; void *ptr; zend_class_entry *ce; zend_function *func; struct { uint32_t w1; uint32_t w2; } ww; } zend_value;
1.3 zval內(nèi)存占用
2. 變量存儲(chǔ)
2.1 true, false, null
2.2 long,double
2.3 其它類型(string,array,object,resource等)
struct _zend_string { zend_refcounted_h gc; zend_ulong h; /* hash value */ size_t len; char val[1]; };
一文帶你分析php7的zval
相關(guān)推薦
- RakSmart服務(wù)器成本優(yōu)化策略
- 2025年國(guó)內(nèi)免費(fèi)AI工具推薦:文章生成與圖像創(chuàng)作全攻略
- 自媒體推廣實(shí)時(shí)監(jiān)控從服務(wù)器帶寬到用戶行為解決方法
- AI時(shí)代,個(gè)人站長(zhǎng)如何用AI工具實(shí)現(xiàn)“一人公司”
- 個(gè)人站長(zhǎng)消亡論?從“消失”到“重生”的三大破局路徑
- raksmart法蘭克福云服務(wù)器延遲高嗎?
- 自媒體人搭建直播服務(wù)器使用raksmart優(yōu)化技巧
- 華納云高防服務(wù)器3.6折起低至1188元/月,企業(yè)級(jí)真實(shí)防御20G`T級(jí),自營(yíng)機(jī)房一手服務(wù)器資源