Rust文档在bool的大小上含糊不清。它是保证为1字节,还是像C++中那样未指定?
bool
fn main() { use std::mem; println!("{}",mem::size_of::<bool>()); //always 1? }
n3ipq98p1#
Rust将i1发送给LLVM for bool,并依赖于它生成的任何内容。LLVM使用i8(一个字节)来表示Rust目前支持的所有平台的内存中的i1。另一方面,由于Rust开发人员迄今为止一直拒绝使用特定的bool表示法,因此对未来没有确定性。因此,当前的实现可以保证这一点,但任何规范都不能保证。您可以在this RFC discussion以及链接的PR和问题中找到更多详细信息。请参见E_net4's answer,了解自本答案发布以来Rust中引入的更改的更多信息。
i1
i8
qaxu7uf22#
虽然历史上有一个希望避免承诺一个更具体的表示,但最终在2018年1月决定bool应提供以下保证:
_Bool
文档已相应更新。在Rust reference中,bool定义如下:bool类型是一种数据类型,可以是true或false。布尔类型使用一个字节的内存。[...]从1.25.0开始,std::mem::size_of::<bool>()的输出为1。因此,人们确实可以依赖bool是1字节(如果这是以往任何时候都改变,这将是一个相当响亮的变化)。另见:
true
false
std::mem::size_of::<bool>()
2条答案
按热度按时间n3ipq98p1#
Rust将
i1
发送给LLVM forbool
,并依赖于它生成的任何内容。LLVM使用i8
(一个字节)来表示Rust目前支持的所有平台的内存中的i1
。另一方面,由于Rust开发人员迄今为止一直拒绝使用特定的bool
表示法,因此对未来没有确定性。因此,当前的实现可以保证这一点,但任何规范都不能保证。
您可以在this RFC discussion以及链接的PR和问题中找到更多详细信息。
请参见E_net4's answer,了解自本答案发布以来Rust中引入的更改的更多信息。
qaxu7uf22#
虽然历史上有一个希望避免承诺一个更具体的表示,但最终在2018年1月决定
bool
应提供以下保证:bool
的定义等同于_Bool
的C99定义bool
的大小正好是1。文档已相应更新。在Rust reference中,
bool
定义如下:bool
类型是一种数据类型,可以是true
或false
。布尔类型使用一个字节的内存。[...]从1.25.0开始,
std::mem::size_of::<bool>()
的输出为1。因此,人们确实可以依赖
bool
是1字节(如果这是以往任何时候都改变,这将是一个相当响亮的变化)。另见: