【发布时间】:2016-10-29 01:36:00
【问题描述】:
Rust documentation 对 bool 的大小含糊不清。
它是否保证为 1 个字节,还是像 C++ 中那样未指定?
fn main() {
use std::mem;
println!("{}",mem::size_of::<bool>()); //always 1?
}
【问题讨论】:
标签: size rust primitive-types
Rust documentation 对 bool 的大小含糊不清。
它是否保证为 1 个字节,还是像 C++ 中那样未指定?
fn main() {
use std::mem;
println!("{}",mem::size_of::<bool>()); //always 1?
}
【问题讨论】:
标签: size rust primitive-types
虽然历史上希望避免承诺更具体的表示,但最终decided in January 2018bool 应提供以下保证:
bool的定义等同于_Bool的C99定义
bool 的大小正好是 1。文档已相应更新。在Rust reference中,bool是这样定义的:
bool类型是一种数据类型,可以是true或false。 boolean 类型使用一个字节的内存。 [...]
从 1.25.0 开始也有记录,std::mem::size_of::<bool>() 的输出为 1。
因此,确实可以依赖 bool 为 1 个字节(如果要更改,那将是一个相当大的更改)。
另见:
【讨论】:
Rust 为 bool 向 LLVM 发出 i1 并依赖于它产生的任何东西。对于 Rust 目前支持的所有平台,LLVM 使用 i8(一个字节)在内存中表示 i1。另一方面,未来还不确定,因为到目前为止,Rust 开发人员一直拒绝承诺特定的 bool 表示。
因此,它由当前实现保证,但不受任何规范保证。
您可以在this RFC discussion 和链接的 PR 和问题中找到更多详细信息。
编辑:请参阅下面的答案,以了解有关自此答案发布以来 Rust 中引入的更改的更多信息。
【讨论】: