【问题标题】:Is bool guaranteed to be 1 byte?bool 是否保证为 1 个字节?
【发布时间】:2016-10-29 01:36:00
【问题描述】:

Rust documentationbool 的大小含糊不清。
它是否保证为 1 个字节,还是像 C++ 中那样未指定?

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

【问题讨论】:

标签: size rust primitive-types


【解决方案1】:

虽然历史上希望避免承诺更具体的表示,但最终decided in January 2018bool 应提供以下保证:

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

文档已相应更新。在Rust reference中,bool是这样定义的:

bool 类型是一种数据类型,可以是 truefalse。 boolean 类型使用一个字节的内存。 [...]

从 1.25.0 开始也有记录,std::mem::size_of::&lt;bool&gt;() 的输出为 1。

因此,确实可以依赖 bool 为 1 个字节(如果要更改,那将是一个相当大的更改)。

另见:

【讨论】:

    【解决方案2】:

    Rust 为 bool 向 LLVM 发出 i1 并依赖于它产生的任何东西。对于 Rust 目前支持的所有平台,LLVM 使用 i8(一个字节)在内存中表示 i1。另一方面,未来还不确定,因为到目前为止,Rust 开发人员一直拒绝承诺特定的 bool 表示。

    因此,它由当前实现保证,但不受任何规范保证。

    您可以在this RFC discussion 和链接的 PR 和问题中找到更多详细信息。

    编辑:请参阅下面的答案,以了解有关自此答案发布以来 Rust 中引入的更改的更多信息。

    【讨论】:

    • 特别是this comment,它明确表示他们不想束缚代表。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 2015-02-12
    • 2017-09-21
    • 2019-06-03
    • 1970-01-01
    相关资源
    最近更新 更多