bool保证是1个字节吗?

时间:2016-06-27 06:27:00

标签: size rust primitive-types

boolfn main() { use std::mem; println!("{}",mem::size_of::<bool>()); //always 1? } 的大小上含糊不清 它保证是1个字节,还是像C ++一样未指定?

public IDisposable subscription;     

 public ProcessData(DeviceModel model, string name = "") : base(model, name)
            {
                BaseAddress = _model.Process.oxyVal.regAddr;
CurrentSampleRate=1000;
                    subscription =  Observable.Interval(TimeSpan.FromMilliseconds(CurrentSampleRate)).Subscribe(async t => await Refresh());

            }


public async Task Refresh()
    {
        Status = "Fetching from device...";
        if ((_model == null) || !_model.IsSerialPortOpen || busy)
        {
            StatusTrans = "Device not connected.";
            return;
        }
        busy = true;
        try
        {
            await ReadFromDevice().ConfigureAwait(false);
            StatusTrans = "Completed.";
        }
        catch (Exception ex)
        {
            StatusTrans = ex.Message;
            Trace.WriteLine(ex.Message);
        }
        busy = false;
    }


 protected override async Task ReadFromDevice()
        {
            var SampleRate_var = await _model.Measurement.sampleRate.sampleRate.GetValue();
            CurrentSampleRate = SampleRate_var * 1000;
            /*****other code********/
        }
  public void ChangeSampleRate()
        {
            subscription?.Dispose();
            Observable.Interval(TimeSpan.FromMilliseconds(CurrentSampleRate)).Subscribe(async t => await Refresh());
        }

2 个答案:

答案 0 :(得分:20)

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

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

您可以在this RFC discussion以及关联的公关和问题中找到更多详细信息。

答案 1 :(得分:2)

虽然从历史上一直希望避免致力于更具体的表示,但decided in January 2018最终bool应该提供以下保证:

  • bool的定义等同于Bool_的C99定义
  • 对于所有当前支持的平台,bool的大小恰好为1。

文档已相应更新。在Rust reference中,bool的定义如下:

  

bool类型是可以为truefalse的数据类型。布尔类型使用一个字节的内存。 [...]

从1.25.0开始,std::mem::size_of::<bool>()的输出为1。

因此,确实可以依靠bool为1字节(并且如果这个改变,它将是一个很大的声音)。