我正在为我的应用程序使用消息传递架构,通常传递的类型是io::Result<Box<str>>.有时候,我想传递一个空字符串.执行此操作时是否会发生任何分配?

fn pass_empty_string(tx: mpsc::Sender<io::Result<Box<str>>>) {
   tx.send(Ok("".into())) 
}

推荐答案

不.控制流经过几个函数,但最终达到RawVec::allocate_in(),有以下判断:

// Don't allocate here because `Drop` will not deallocate when `capacity` is 0.
if T::IS_ZST || capacity == 0 {
    Self::new_in(alloc)
}

如果字符串是常数,则为LLVM will also optimize the code away.

但请注意,这不是guaranteed.

Rust相关问答推荐

为什么函数不接受选项T参数的所有权?

泛型属性比较

如何将元素添加到向量并返回对该元素的引用?

如果A == B,则将Rc A下推到Rc B

在函数内定义impl和在函数外定义impl的区别

下载压缩文件

值为可变对象的不可变HashMap

如何循环遍历0..V.len()-1何时v可能为空?

用于判断整数块是否连续的SIMD算法.

如何执行数组文字的编译时串联?

实现 Deref 的 struct 可以返回对外部数据的引用吗?

`UnsafeCell` 在没有锁定的情况下跨线程共享 - 这可能会导致 UB,对吗?

为什么要这样编译?

从嵌入式 Rust 中的某个时刻开始经过的时间

发生移动是因为 `data` 的类型为 `Vec`,它没有实现 `Copy` 特性

Abortable:悬而未决的期货?

如何从 many0 传播 Nom 失败上下文?

编写 TOML 文件以反序列化为 struct 中的枚举

A 有一个函数,它在 Option<> 类型中时无法编译,但在 Option<> 类型之外会自行编译.为什么?

为什么在使用 self 时会消耗 struct 而在解构时不会?