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