【问题标题】:Does String::from_utf8_lossy() allocate memory?String::from_utf8_lossy() 是否分配内存?
【发布时间】:2020-05-21 01:30:06
【问题描述】:

我想将数组的前 10 个字节转换为字符串。

如果我执行String::from_utf8_lossy(),这将返回&str

我是否正确理解 &str 是这 10 个字节的地址,实际上内存只会被分配用于创建链接?

【问题讨论】:

  • 这里可能有些混乱,因为String::form_utf8_lossy() 返回的是Cow<str>,而不是&str。文档here;正如他们所说,如果不需要插入替换字符,该函数不会分配。

标签: rust


【解决方案1】:

the docs 引用String::from_utf8_lossy

这个函数返回一个Cow<'a, str>。如果我们的字节切片是无效的 UTF-8,那么我们需要插入替换字符,这将改变字符串的大小,因此需要 String。但如果它已经是有效的 UTF-8,我们就不需要新的分配。这种返回类型允许我们处理这两种情况。

因此它不返回&str,而是返回Cow<str>,并且仅在必要时分配用“�”替换无效字节。

不过,一般来说,如果函数实际返回 &str,则不会(新)分配该 &str。它要么是静态的(嵌入在二进制文件本身中),要么具有从函数的某些参数派生的生命周期(例如String::trim)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2015-11-21
    • 1970-01-01
    相关资源
    最近更新 更多