在下面的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/

10-10 01:00