Я работаю с необработанными указателями в Rust и пытаюсь скопировать область памяти из одного места в другое. Мне удалось успешно скопировать память, но только с использованием цикла for и копирования каждого байта индивидуально с использованием смещения указателя. Я не могу понять, как сделать это более эффективно, т. Е. Как одна копия строки байтов, может ли кто-нибудь указать мне в правильном направлении?Запись в несколько байтов эффективно в Rust
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]);
}
}
}
LLVM (бэкэнд rustc), безусловно, обнаружит такие циклы и оптимизирует их до максимально возможного кода. – rightfold
вы можете использовать [std :: ptr :: copy] (https://doc.rust-lang.org/std/ptr/fn.copy.html) или [std :: ptr :: copy_nonoverlapping] (https://doc.rust-lang.org/std/ptr/fn.copy_nonoverlapping.html) (последнее возможно, поскольку вы, возможно, не перекрываете места памяти (вам необходимо это гарантировать)) –
@ker Вы должны сделать это в ответ. – starblue