Skip to content

Commit

Permalink
Update 3.2.md
Browse files Browse the repository at this point in the history
  • Loading branch information
edengzv committed May 31, 2015
1 parent 5cb0696 commit d8559cb
Showing 1 changed file with 1 addition and 1 deletion.
2 changes: 1 addition & 1 deletion 3.2.md
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,7 @@ zval *get_var_and_separate(char *varname, int varname_len TSRMLS_DC)
但是内核是怎么知道这一切的呢?简单的讲,它是通过zval的is_ref__gc成员来获取这些信息的。这个成员只有两个值,就像开关的开与关一样。它的这两个状态代表着它是否是一个用户在PHP语言中定义的引用。在第一条语句($a = 1;)执行完毕后,$a对应的zval的refcount__gc等于1,is_ref__gc等于0;。 当第二条语句执行后($b = &$a;),refcount__gc属性向往常一样增长为2,而且is_ref__gc属性也同时变为了1!
最后,在执行第三条语句的时候,内核再次检查$b的zval以确定是否需要复制出一份新的zval结构来,这次不需要复制,因为我们刚才上面的get_var_and_separate函数其实是个简化版,并且少写了一个条件:
````c
/* 如果这个zval在php语言中是通过引用的形式存在的,或者它的refcount小于2,则不许要复制。*/
/* 如果这个zval在php语言中是通过引用的形式存在的,或者它的refcount小于2,则不需要复制。*/
if ((*varval)->is_ref || (*varval)->refcount < 2) {
return *varval;
}
Expand Down

0 comments on commit d8559cb

Please sign in to comment.