zend_string_release和zend_string_free有什么区别?

马西奥

我看到了,但仍然无法完全自信地解释差异:

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函数是针对您已经知道自己是唯一使用该字符串的情况的一种优化它会直接释放字符串,而无需先检查refcount(断言仅用于调试,在发行版本中不存在)。

如有疑问,请使用zend_string_release

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

zend_string_release和zend_string_free有什么区别?

来自分类Dev

[String!]和[String]!有什么区别?

来自分类Dev

String和String []有什么区别?

来自分类Dev

Zend Optimizer和Zend Guard Loader有什么区别?他们实际上是做什么的?

来自分类Dev

Zend Optimizer和Zend Guard Loader有什么区别?他们实际上是做什么的?

来自分类Dev

[Dictionary <String,String>()]和[String:String]()有什么区别

来自分类Dev

string[] 和 [string,string,string] 有什么区别

来自分类Dev

教义2,Tablegateway和zend_db有什么区别?

来自分类Dev

教义2,Tablegateway和zend_db有什么区别?

来自分类Dev

Zend2 中的工厂服务和可调用服务有什么区别?

来自分类Dev

String name [] = {};和有什么区别?和String [] name = {};

来自分类Dev

`this instanceof String`和`“ foo” instanceof String`有什么区别?

来自分类Dev

C#中的string [] []和string [,]有什么区别

来自分类Dev

Array <string>和string []有什么区别?

来自分类Dev

for 循环中的 String[] 和 String 有什么区别(Java)

来自分类Dev

duration().get(String) 和 duration().as(String) 有什么区别?

来自分类Dev

数据类型 String 和 [String] 有什么区别?

来自分类Dev

vbNullString,String.Empty和“”之间有什么区别?

来自分类Dev

URI / URL和String有什么区别?

来自分类Dev

Java中的.toString()和(String)之间有什么区别

来自分类Dev

render和render_to_string有什么区别?

来自分类Dev

@Profile("String") 和 @ProfileName 有什么区别

来自分类Dev

CAST(... to STRING) 和 BASE64(...) 有什么区别

来自分类Dev

return(string expr)和return New String(string expr)有什么区别?

来自分类Dev

return(string expr)和return New String(string expr)有什么区别?

来自分类Dev

(string&)string()和(string&)“”作为默认参数有什么区别?

来自分类Dev

free和vmstat命令之间有什么区别?

来自分类Dev

`String.class`和`new Class [] {String.class}`之间有什么区别?

来自分类Dev

python中的r'string'和普通的'string'有什么区别?

Related 相关文章

  1. 1

    zend_string_release和zend_string_free有什么区别?

  2. 2

    [String!]和[String]!有什么区别?

  3. 3

    String和String []有什么区别?

  4. 4

    Zend Optimizer和Zend Guard Loader有什么区别?他们实际上是做什么的?

  5. 5

    Zend Optimizer和Zend Guard Loader有什么区别?他们实际上是做什么的?

  6. 6

    [Dictionary <String,String>()]和[String:String]()有什么区别

  7. 7

    string[] 和 [string,string,string] 有什么区别

  8. 8

    教义2,Tablegateway和zend_db有什么区别?

  9. 9

    教义2,Tablegateway和zend_db有什么区别?

  10. 10

    Zend2 中的工厂服务和可调用服务有什么区别?

  11. 11

    String name [] = {};和有什么区别?和String [] name = {};

  12. 12

    `this instanceof String`和`“ foo” instanceof String`有什么区别?

  13. 13

    C#中的string [] []和string [,]有什么区别

  14. 14

    Array <string>和string []有什么区别?

  15. 15

    for 循环中的 String[] 和 String 有什么区别(Java)

  16. 16

    duration().get(String) 和 duration().as(String) 有什么区别?

  17. 17

    数据类型 String 和 [String] 有什么区别?

  18. 18

    vbNullString,String.Empty和“”之间有什么区别?

  19. 19

    URI / URL和String有什么区别?

  20. 20

    Java中的.toString()和(String)之间有什么区别

  21. 21

    render和render_to_string有什么区别?

  22. 22

    @Profile("String") 和 @ProfileName 有什么区别

  23. 23

    CAST(... to STRING) 和 BASE64(...) 有什么区别

  24. 24

    return(string expr)和return New String(string expr)有什么区别?

  25. 25

    return(string expr)和return New String(string expr)有什么区别?

  26. 26

    (string&)string()和(string&)“”作为默认参数有什么区别?

  27. 27

    free和vmstat命令之间有什么区别?

  28. 28

    `String.class`和`new Class [] {String.class}`之间有什么区别?

  29. 29

    python中的r'string'和普通的'string'有什么区别?

热门标签

归档