documentation for std::mem::size_of
没有提供使用&str
或String
的示例,但是两个返回的大小都带有以下代码:
println!("The size of a string slice (&str): {}", mem::size_of::<&str>());
// OUTPUT: The size of a string slice (&str): 16
println!("The size of a growable string (String): {}", mem::size_of::<String>());
// OUTPUT: The size of a growable string (String): 24
据我了解,&str
类型只是对"sequence of Unicode scalar values encoded as a stream of UTF-8 bytes"开头的引用。 &str
是指两个指针的大小吗?我知道在64位系统上,指针的长度为8个字节。
mem::size_of::<str>()
确实返回错误,就像我期望的那样。但是,String
和&String
都返回大小。
答案 0 :(得分:4)
为什么size_of可以用于未调整大小的类型?
不能。如果可以,它将被定义为:
pub const fn size_of<T: ?Sized>() -> usize
// ^^^^^^^^
为什么可以在[{
&str
/String
/&String
]上使用size_of?
&str
,String
和&String
都是大小类型。
&str
本质上是:
struct StringSlice {
ptr: *const u8,
len: usize,
}
String
本质上是:
struct String {
ptr: *const u8,
len: usize,
cap: usize,
}
&String
本质上是:
struct StringRef {
ptr: *const String,
}
指的是两个指针的大小
usize
是一个整数类型,可以保证是本机指针的大小,所以...有点?
另请参阅: