本文简要介绍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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。