string - 在 Rust 中 .clear() 然后 .push_str(String) 安全吗?

标签 string memory rust

我是 Rust 的初学者,正在尝试了解 String 类型。

我只是想知道在 .push_str() 之前执行 .clear() 以推送更大的字符串是否安全,IE:我能保证吗尽管使用相同的指针,但每次系统都能增加容量?是否有(可能有)更好、可能更安全的方法来用更大的字符串覆盖字符串?

最佳答案

一步一步:

  • String::clear()非常安全并设置内部 Vec (因为这就是 String 背后的原因)大小(不是容量)为零
  • String::push_str()然后将您输入的任何内容附加到该零大小 Vec 的末尾,确保在它溢出时重新分配足够的空间。因为类型本身就是 &str你可以非常确定它会起作用。

唯一可能的情况如下:因为String是一个拥有的类型并且 &str是不可变的借用,你的内存使用在push_str()之后将增加 &str 的大小你喂它除非你的StringVec 支持容量大于&str .这是可以预料的。如果您没有,您的代码将(显然)触发 OOM。

所以,是的,它是绝对安全的,老实说,如果你真的有 &mut String,这是最好的方法而不是 String本身:-)

关于string - 在 Rust 中 .clear() 然后 .push_str(String) 安全吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57835026/

相关文章:

java - Java 中的 split() 方法从哪里开始将正则表达式与字符串匹配?

php - 如何从 PHP 中存储在我的数据库中的文本中获取前 n 个单词?

vba - 当我使用按钮运行宏时,由于内存不足,excel 无法完成

c++ - 如果内存块被手动覆盖,如何删除结构数组

json - 如何通过属性将 JSON 对象数组整理成包含每个对象属性向量的结构?

java - 关于反转字符串的问题

php - mb_substr 和 substr 的区别

c - 结构内的指针重新分配正常,但指向结构内指针的指针无法重新分配,并出现无效指针错误

rust - 如何在Rust中将本地时区从UTC转换为UTC

algorithm - 我无法理解 Rust 代码的区别