在下面的php7 c代码中引用计数会发生什么?
在php7中,zval
是在堆栈上创建的,因此出现了参考问题:
zval destination;
array_init(destination);
{
// scope begin
zval val;
// does val's refcount incremented here or val is copied?
add_next_index_zval(destination, val);
// here the "val" will be destroyed.
// Does "destination" will experience any problems?
}
最佳答案
我相信它是被复制的。如果在此处使用zval
来保存自定义类实例,则您的类将需要一个复制构造函数来编译此代码。
我认为,当您使用PHP而不是C进行编程时,会发生自动RC。您必须使用指针来利用此级别的引用。
并且,如果您探索更多有关编写PHP扩展的信息,您会发现Zend Engine实际上会询问您如何使用RC和原始(目标)zval,同时又将其返回PHP()。如果您不仔细处理它们,则可能存在内存泄漏(在调试模式下ZE会告诉您这一点!)甚至是段错误。
关于php - php7 zend扩展:堆栈变量的引用计数?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38338199/