Запись в несколько байт эффективно в ржавчине
Я работаю с необработанными указателями в 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 ответ:
Как упоминалось в комментариях @ker, это фактически встроено в стандартную библиотеку:
Обратите внимание, что в то время как в способе Rust перемещения объектов (и, следовательно, передачи права собственности) просто копируются биты, если объект не является
std::ptr::copy
эквивалентно Cmemmove
std::ptr::copy_nonoverlapping
эквивалентно Cmemcpy
Copy
, вам нужно убедиться, что после копирования используется (и отбрасывается) только один изsrc
илиdst
.