Rust的String::from("literal")是否复制了所有的字符串数据?

我注意到我经常需要String::from("mydummystring")在 Rust 中做。调用from()最终会创建字符串数据的完整副本吗?似乎这将是一个主要的性能问题。

回答

是的,From<&str>对于String通过创建一个新的堆分配的缓冲区,并从原来的切片将数据复制到它的工作原理。

似乎这将是一个主要的性能问题。

可能比你想象的要少。复制一大块字节通常非常快。您应该对代码进行基准测试以了解复制是否是瓶颈。即使复制很慢,大多数非平凡的程序也可能会复制一些字符串;你不能永远复制任何东西。

然而,如果有很多不必要的复制正在进行并且这对您的设计来说是一个问题,Rust 提供了许多其他选项。String不是 Rust 唯一的字符串类型,甚至不是最常用的一种;如果您不需要复制字符串,您通常可以使用 借用它们,使用&str共享所有权Rc<str>,将拥有决定推迟到运行时使用Cow<str>,甚至可以使用字符串实习库,例如string-cache. 实际上,Rust可以控制值的所有权和复制,这比大多数其他语言要好得多。最终,由您来选择对程序中的字符串最有意义的所有权类型。

参考

  • Rust 的 `String` 和 `str` 有什么区别?
  • 使用字符串存储 UTF-8 编码文本(TRPL 第 8.2 章)
  • 在不同集合中使用 String 及其指针的安全有效方法

以上是Rust的String::from("literal")是否复制了所有的字符串数据?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>