4
我正在使用Rust中的raw指針,並且試圖將內存區域從一個地方複製到另一個地方。我已經成功地複製了內存,但只使用了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