當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Rust Layout.extend用法及代碼示例


本文簡要介紹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) ,因為它是未指定的。)

請注意,生成的布局的對齊方式將是 selfnext 的最大對齊方式,以確保兩個部分的對齊。

返回 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-lang.org大神的英文原創作品 std::alloc::Layout.extend。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。