彻底理解PHP变量结构

彻底理解PHP变量结构
在PHP5 zval
1。 / /机制
_zval_struct { typedef struct
zvalue_value价值;
zend_uint refcount__gc;
zend_uchar型;
zend_uchar is_ref__gc;
zval };
2。 / / zvalue_value
_zvalue_value { typedef联盟
长的语句; / /布尔型、整型和资源类型
双dval; / /浮点型
结构字符串
字符*;
Int len;
STR };
哈希表* HT; / /阵列
zend_object_value obj; / /对象
zend_ast * AST; / /常量表达式(php5.6只)
zvalue_value };
三. / / zend_object_value
_zend_object_value { typedef struct
zend_object_handle手柄;
const zend_object_handlers *处理
Zend_object_value};
4。 / / zend_object_handle
typedef unsigned int zend_object_handle;
大多数的文章都提到,当指PHP5,变结构sizeof(变量)= 24,sizeof = 16(zvalue_value),其实这种说法是不准确的,在CPU的64位,结果是正确的。

但当CPU 32bit sizeof(变量)= 16,sizeof = 8(zvalue_value),主要是因为CPU是64位,指针是8个字节,和32位,指针是4个字节。

在PHP 7中zval
1。 / /机制
结构_zval_struct {
zend_value值; / * * /
联盟{
struct {
zend_endian_lohi_4(
zend_uchar型、主动型 / * * /
zend_uchar type_flags,
zend_uchar const_flags,
zend_uchar预留电话信息(Ex) / * * /本)
V };
uint32_t type_info;
U1 };
联盟{
uint32_t下哈希碰撞链; / * * /
uint32_t cache_slot文字缓存槽; / * * /
uint32_t株系(AST值; / * * /节点)
uint32_t num_args;参数个数为(前/本)。
uint32_t fe_pos foreach位置; / * * /
uint32_t fe_iter_idx foreach迭代器指数; / * * /
uint32_t access_flags类常量访问标志; / * * /
uint32_t property_guard单一物业的保安; / * * /
U2 };
};
2。 / / zend_value
_zend_value { typedef联盟
zend_long lval长值; / * * /
双双双值; / * * /
zend_refcounted *数;
zend_string * STR;
zend_array * ARR;
zend_object * OBJ;
zend_resource * RES;
zend_reference *参考
zend_ast_ref * AST;
zval * ZV;
void*指针;
zend_class_entry *;
zend_function *功能
struct {
uint32_t W1;
uint32_t W2;
WW };
zend_value };
PHP 7似乎很多,但实际上它是简单的,CPU是否是32位或64位,sizeof(变量)总是等于16。

主要在WW看到zend_value是两uint32_t,这总是8字节,因此sizeof(zend_value)= 8,因此sizeof(变量)= 16。

所以,在这一点php7节省内存的新特点,在32位系统,PHP5 = > php7没有变化。
Sizeof,顺便说一下,不能作为一个功能,虽然写的是像一个函数,该值将在编译时确定的,不是类似于编译预处理运行

总结

以上介绍的是Xiaobi的PHP变量的结构,我们希望能帮助你。如果你有任何问题,请给我留言,萧边会及时给您回复。谢谢您支持网站
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部