有没有办法编写一个函数来保证返回值的零拷贝?

时间:2018-05-26 13:01:44

标签: rust

给出C原型函数:

int c_fn(void * out_param); //Write to out_param is successful if 0 is returned

我希望将它包装在一个返回Result的Rust函数中,如下所示:

extern crate libc;

use libc::{c_int, c_void};
use std::mem;

extern "C" {
    /// Write to out_param is successful if 0 is returned
    fn c_fn(out_param: *mut c_void) -> c_int;
}

enum Error {
    SomeError,
}

fn call_c_fn<T>() -> Result<T, Error> {
    let mut buf: T;
    let ret = unsafe {
        buf = mem::uninitialized();
        c_fn(&mut buf as *mut _ as *mut c_void)
    };
    if ret == 0 {
        return Ok(buf);
    } else {
        return Err(Error::SomeError);
    }
}

我担心行return Ok(buf)会不必要地复制buf。我也担心打破返回值优化并在那里产生额外的副本。

是否有保证在此功能中可以进行零拷贝?有没有办法编写函数来获得保证?

澄清一下:在Rust的当前状态下,这是编写此函数的最佳方法吗? (关注绩效)

0 个答案:

没有答案