一、 zend_string 结构体 定义
struct _zend_string {
zend_refcounted_h gc;
zend_ulong h; /* hash value */
size_t len;
char val[1];
};
二、写时复制
写时复制:对于整形或者其他简单类型因为它们是 zval,16个字节就可以表示的,所以是直接赋值的。对于 string,例如: $a = ‘string’; $b = $a; 那么它们是指向的同一个内存地址,对应的 gc 的refcount = 1 + 1,等于 refcount = 2,当我们修改 b 的时候,a 还是指向的 zval的 zend_string,那么b 会 copy 一份出来,在上面进行修改,这个时候 $a 对应的 refcount 等于1
三、gdb 调试
定义 string.php 文件,代码如下:
<?php
//const string
$c = "hello world!";
echo $c;
$a = time()."string&