在 Rust 中有效地写入多个字节
Writing to multiple bytes efficiently in Rust
我正在使用 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]);
}
}
}
正如@ker在评论中提到的,这实际上是内置在标准库中的:
std::ptr::copy
等同于C的memmove
std::ptr::copy_nonoverlapping
等价于C的memcpy
请注意,虽然 Rust 移动对象(并因此转移所有权)的方式只是复制位,除非对象是 Copy
,您需要确保只有 src
或 dst
在复制后使用(并删除)。
我正在使用 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]);
}
}
}
正如@ker在评论中提到的,这实际上是内置在标准库中的:
std::ptr::copy
等同于C的memmove
std::ptr::copy_nonoverlapping
等价于C的memcpy
请注意,虽然 Rust 移动对象(并因此转移所有权)的方式只是复制位,除非对象是 Copy
,您需要确保只有 src
或 dst
在复制后使用(并删除)。