本文簡要介紹rust語言中 std::alloc::Layout.extend
的用法。
用法
pub fn extend(&self, next: Layout) -> Result<(Layout, usize), LayoutError>
創建一個說明記錄的布局self
其次是next
,包括任何必要的填充,以確保next
將正確對齊,但是沒有尾隨填充.
為了匹配 C 表示布局 repr(C)
,您應該在使用所有字段擴展布局後調用 pad_to_align
。 (沒有辦法匹配默認的 Rust 表示布局 repr(Rust)
,因為它是未指定的。)
請注意,生成的布局的對齊方式將是 self
和 next
的最大對齊方式,以確保兩個部分的對齊。
返回 Ok((k, offset))
,其中 k
是連接記錄的布局,而 offset
是嵌入在連接記錄中的 next
開始的相對位置(以字節為單位)(假設記錄本身從偏移量 0 開始)。
算術溢出時,返回 LayoutError
。
例子
要計算 #[repr(C)]
結構的布局以及字段與其字段布局的偏移量:
pub fn repr_c(fields: &[Layout]) -> Result<(Layout, Vec<usize>), LayoutError> {
let mut offsets = Vec::new();
let mut layout = Layout::from_size_align(0, 1)?;
for &field in fields {
let (new_layout, offset) = layout.extend(field)?;
layout = new_layout;
offsets.push(offset);
}
// Remember to finalize with `pad_to_align`!
Ok((layout.pad_to_align(), offsets))
}
相關用法
- Rust Lazy用法及代碼示例
- Rust Lazy.new用法及代碼示例
- Rust Lazy.force用法及代碼示例
- Rust LowerExp用法及代碼示例
- Rust LinkedList.push_front用法及代碼示例
- Rust LinkedList.remove用法及代碼示例
- Rust Location.line用法及代碼示例
- Rust LineWriter.new用法及代碼示例
- Rust LinkedList.front用法及代碼示例
- Rust LineWriter用法及代碼示例
- Rust Location.file用法及代碼示例
- Rust LinkedList.is_empty用法及代碼示例
- Rust Location.column用法及代碼示例
- Rust LinkedList.back_mut用法及代碼示例
- Rust LocalKey用法及代碼示例
- Rust LineWriter.with_capacity用法及代碼示例
- Rust LinkedList.pop_front用法及代碼示例
- Rust LinkedList.new用法及代碼示例
- Rust LowerHex用法及代碼示例
- Rust LinkedList.clear用法及代碼示例
- Rust LinkedList.iter_mut用法及代碼示例
- Rust LinkedList.drain_filter用法及代碼示例
- Rust Location.caller用法及代碼示例
- Rust LinkedList.back用法及代碼示例
- Rust LinkedList.front_mut用法及代碼示例
注:本文由純淨天空篩選整理自rust-lang.org大神的英文原創作品 std::alloc::Layout.extend。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。