zend_string_release和zend_string_free有什么区别?
发布时间:2020-12-13 21:52:50 所属栏目:PHP教程 来源:网络整理
导读:我看到了 source,但仍无法用完全自信的方式解释差异: 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) IS_STR_PERSISTENT); }}static zend_always_inlin
我看到了
source,但仍无法用完全自信的方式解释差异:
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) & 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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |