rust bool是否保证为1字节?

wz3gfoph  于 2023-02-08  发布在  其他
关注(0)|答案(2)|浏览(170)

Rust文档在bool的大小上含糊不清。
它是保证为1字节,还是像C++中那样未指定?

fn main() {
    use std::mem;
    println!("{}",mem::size_of::<bool>()); //always 1?
}
n3ipq98p

n3ipq98p1#

Rust将i1发送给LLVM for bool,并依赖于它生成的任何内容。LLVM使用i8(一个字节)来表示Rust目前支持的所有平台的内存中的i1。另一方面,由于Rust开发人员迄今为止一直拒绝使用特定的bool表示法,因此对未来没有确定性。
因此,当前的实现可以保证这一点,但任何规范都不能保证。
您可以在this RFC discussion以及链接的PR和问题中找到更多详细信息。
请参见E_net4's answer,了解自本答案发布以来Rust中引入的更改的更多信息。

qaxu7uf2

qaxu7uf22#

虽然历史上有一个希望避免承诺一个更具体的表示,但最终在2018年1月决定bool应提供以下保证:

  • bool的定义等同于_Bool的C99定义
  • 反过来,对于所有当前支持的平台,bool的大小正好是1。

文档已相应更新。在Rust reference中,bool定义如下:
bool类型是一种数据类型,可以是truefalse。布尔类型使用一个字节的内存。[...]
从1.25.0开始,std::mem::size_of::<bool>()的输出为1。
因此,人们确实可以依赖bool是1字节(如果这是以往任何时候都改变,这将是一个相当响亮的变化)。
另见:

相关问题