正在运行this code in rust:
fn main() {
println!("{:?}", std::mem::size_of::<[u8; 1024]>());
println!("{:?}", std::mem::size_of::<[bool; 1024]>());
}
1024
1024
这不是我的预期。所以我编译并在发布模式下运行。但我得到了同样的答案。
为什么rust编译器似乎为每个布尔值分配一个完整的字节?对我来说,似乎只是一个简单的优化,只分配128个字节。 This project意味着我不是第一个想到这一点。
这是编译器比看起来更难的情况吗?或者这不是优化的,因为它不是一个现实的场景?或者我在这里不明白?
答案 0 :(得分:5)
指针和参考。
*mut ()
。这两个假设一起意味着:
这实质上意味着任何类型必须具有一个字节的最小对齐。
请注意,这不一定是个问题。选择128字节表示应该谨慎,因为这意味着交换速度(和方便)的内存。这不是纯粹的胜利。
现有技术(在C ++中以std::vector<bool>
的名义)被广泛认为是事后的错误。