本文簡要介紹rust語言中 pointer.align_offset
的用法。
用法
pub fn align_offset(self, align: usize) -> usize
計算需要應用於指針以使其與 align
對齊的偏移量。
如果無法對齊指針,則執行返回usize::MAX
。允許實施總是返回usize::MAX
。隻有算法的性能取決於在這裏獲得可用的偏移量,而不是其正確性。
偏移量以T
元素的數量表示,而不是字節數。返回的值可以與wrapping_add
方法一起使用。
無法保證偏移指針不會溢出或超出指針指向的分配。由調用者確保返回的偏移量在除對齊之外的所有方麵都是正確的。
Panics
如果 align
不是 power-of-two,則函數會發生Panics。
例子
以u16
訪問相鄰的u8
let x = [5u8, 6u8, 7u8, 8u8, 9u8];
let ptr = x.as_ptr().add(n) as *const u8;
let offset = ptr.align_offset(align_of::<u16>());
if offset < x.len() - n - 1 {
let u16_ptr = ptr.add(offset) as *const u16;
assert_ne!(*u16_ptr, 500);
} else {
// while the pointer can be aligned via `offset`, it would point
// outside the allocation
}
相關用法
- Rust pointer.add用法及代碼示例
- Rust pointer.as_uninit_ref用法及代碼示例
- Rust pointer.as_ptr用法及代碼示例
- Rust pointer.as_mut_ptr用法及代碼示例
- Rust pointer.as_mut用法及代碼示例
- Rust pointer.as_ref用法及代碼示例
- Rust pointer.offset_from用法及代碼示例
- Rust pointer.is_null用法及代碼示例
- Rust pointer.get_unchecked用法及代碼示例
- Rust pointer.wrapping_add用法及代碼示例
- Rust pointer.wrapping_offset用法及代碼示例
- Rust pointer.wrapping_sub用法及代碼示例
- Rust pointer.len用法及代碼示例
- Rust pointer.get_unchecked_mut用法及代碼示例
- Rust pointer.sub用法及代碼示例
- Rust pointer.set_ptr_value用法及代碼示例
- Rust pointer.offset用法及代碼示例
- Rust pointer用法及代碼示例
- Rust poll_fn用法及代碼示例
- Rust park用法及代碼示例
- Rust panicking用法及代碼示例
- Rust panic用法及代碼示例
- Rust println用法及代碼示例
- Rust pending用法及代碼示例
- Rust print用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 pointer.align_offset。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。