在Rust中有效地写入多个字节

时间:2016-03-11 11:02:51

标签: pointers rust unsafe

我正在使用Rust中的原始指针,我正在尝试将一个内存区域从一个地方复制到另一个地方。我已成功复制内存,但只使用for循环并使用指针的偏移量单独复制每个字节。我无法弄清楚如何更有效地做到这一点,即作为一串字节的单个副本,任何人都能指出我正确的方向吗?

fn copy_block_memory<T>(src: *const T, dst: *mut u8) {
    let src = src as *const u8;
    let size = mem::size_of::<T>();
    unsafe {
        let bytes = slice::from_raw_parts(src, size);
        for i in 0..size as isize {
            ptr::write(dst.offset(i), bytes[i as usize]);
        }
    }
}

1 个答案:

答案 0 :(得分:6)

正如@ker在评论中提到的,这实际上是在标准库中构建的:

请注意,虽然在Rust中移动对象的方式(因此转移所有权)只是复制位,除非对象是Copy,否则您需要确保只有src或{{1}中的一个复制后使用(和删除)。