zend_string_release和zend_string_free有什么区别?

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了zend_string_release和zend_string_free有什么区别?脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到了 source,但仍无法用完全自信的方式解释差异: @H_512_5@

static zend_always_inline void zend_string_free(zend_string *s)
{
    if (!IS_INTERNED(s)) {
        ZEND_ASSERT(GC_REfcOUNT(s) <= 1);
        PEfree(s,GC_FLAGS(s) &amp; IS_STR_PERSISTENT);
    }
}

static zend_always_inline void zend_string_release(zend_string *s)
{
    if (!IS_INTERNED(s)) {
        if (--GC_REFCOUNT(s) == 0) {
            pefree(s,GC_FLAGS(s) & IS_STR_PERSISTENT);
        }
    }
}

编辑:

很高兴有一个实际的例子,其中zend_string_free比zend_string_release更合适,反之亦然.

解决方法

zend_strings是引用计数.这意味着多个地方只需通过递增其引用计数即可使用相同的zend_string.这是使用zend_string_copy或zend_string_addref完成的.

zend_string_release函数是您希望在绝大多数情况下使用的函数,它将减少引用计数.如果碰巧你是字符串的最后一个用户(即refcount现在为零),那么字符串将被释放.

zend_string_free函数是对已经知道您是唯一使用该字符串的情况的优化.它将直接释放字符串,而不首先检查引用计数(断言仅用于调试,它在发布版本中不存在).

如有疑问,请使用zend_string_release.

脚本宝典总结

以上是脚本宝典为你收集整理的zend_string_release和zend_string_free有什么区别?全部内容,希望文章能够帮你解决zend_string_release和zend_string_free有什么区别?所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。