此代码显示char
需要4个字节:
println!("char : {}", std::mem::size_of::<char>());
- 为什么需要4个字节?.
- 大小取决于平台,还是始终为4字节?
- 如果总是4个字节,那是为了什么特别的东西?
- 编译器是否保证大小为
char
的最小大小?
In 100 I also get 4 bytes
此代码显示char
需要4个字节:
println!("char : {}", std::mem::size_of::<char>());
char
的最小大小?In 100 I also get 4 bytes
首先:Rust中的char
是表示Unicode标量值的唯一整数值.例如,考虑?(一堆POO,又名U+1F4A9),在 rust 蚀中,它将用char
表示,小数值为128169
(即十六进制中的0x1F4A9
):
fn main() {
let c: char = "?".chars().next().unwrap();
println!("? is {} ({})", c, c as u32);
}
也就是说,Rust char
是4字节,因为4字节是2个字节的最小幂,可以保存任何Unicode标量值的整数值.这个决定是由领域驱动的,而不是由架构约束驱动的.
Note: the emphasis on Scalar value is that a number of "characters" as we see them are actually graphemes composed by multiple combining characters in Unicode, in this case multiple 100 are required.