c语言实现简单版的php z_val结构体

2019年2月26日 · 227 字 · 2 分钟

源码 学习过PHP的人都知道PHP是基于C语言开发的,但是C语言是强类型的,PHP如何实现弱类型呢?答案在于这个 typedef union _zvalue_value { long lval; /* long value */ double dval; /* double value */ struct { char *val; int len; } str; HashTable *ht; /* hash table value */ zend_object_value obj; zend_ast *ast; } zvalue_value; struct _zval_struct { /* Variable information */ zvalue_value value; /* value */ zend_uint refcount__gc; zend_uchar type; /* active type */ zend_uchar is_ref__gc; }; type保存了实际的类型,而value这个共用体保存了具体的值,我们使用到变量的时候需要根据变量类型来取出**_zvalue_value中保存的具体值。 采用union能够避免内存浪费,同一时刻,一个_zval_struct中的共用体zvalue_value**只有一个成员会分配内存,避免了无谓的内存分配。