在 Rust 中,为什么 10 个字符的字符串的 size_of_val() 返回 24 个字节?

mik*_*ana 2 rust

在铁锈中:

println!("{}", mem::size_of_val(&String::from("1234567890")));
Run Code Online (Sandbox Code Playgroud)

印刷24

我知道String可能会存储额外的数据,例如字符串的长度,但是 24 个字节从哪里来?

use std::mem;

fn main() {
    println!("{}", mem::size_of_val(&String::from("1234567890")));
    return ()
}
Run Code Online (Sandbox Code Playgroud)

如果相关的话,我的架构是arm64。

小智 9

Rust 中的AString大小为 24 字节,因为它由指向堆的指针(在 64 位系统上为 8 字节)、8 字节长度和 8 字节容量组成。

\n

AString不会内联存储数据,因为它将值的字节存储在堆上。如果您想要底层字节的长度,请使用String::len

\n

String有关s 表示的文档

\n

  • *实际上* [插入模因] Rust 中的 `std::string::String` 只存储一个 `Vec<u8>`,而后者又存储一个 `RawVec` 和一个 `usize`。“RawVec”依次存储一个唯一的指针、通过“usize”的容量和一个分配器。 (2认同)