Hashtable 为什么是马可;ZVAL_COPY_值(z,v)";似乎在PHP内部无法正常工作?

Hashtable 为什么是马可;ZVAL_COPY_值(z,v)";似乎在PHP内部无法正常工作?,hashtable,php-internals,Hashtable,Php Internals,我的问题是关于哈希表的: 调试的PHP版本是PHP-7.0.12,当我添加一个新字符串时,我不知道zval的str成员在宏“zval_COPY_VALUE(z,v)”中的更新位置,但是它确实通过GDB尝试宏上下文成功地更新了,也就是说,Bucket结构中zval的str成员确实获得了字符串地址 展开宏,最后得到如下代码: zval *_z1 = z; const zval *_z2 = v; zend_refcounted *_gc = (*_z2).value.counted

我的问题是关于哈希表的:

调试的PHP版本是PHP-7.0.12,当我添加一个新字符串时,我不知道zval的str成员在宏“zval_COPY_VALUE(z,v)”中的更新位置,但是它确实通过GDB尝试宏上下文成功地更新了,也就是说,Bucket结构中zval的str成员确实获得了字符串地址

展开宏,最后得到如下代码:

zval *_z1 = z; 
const zval *_z2 = v; 
zend_refcounted *_gc = (*_z2).value.counted      
uint32_t _t = (*_z2).u1.type_info;
uint32_t _w2 = _z2->value.ww.w2; 
(*_z1).value.counted = _gc;
_z1->value.ww.w2 = _w2;
(*_z1).u1.type_info = _t;
任何帮助都将不胜感激,thks。

是工会类型,这意味着所有成员共享相同的起始地址。同时复制
value.counted
value.ww.w2
复制整个
zend_value
结构。无论哪个成员当时实际在使用