bool
在fn 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());
}
答案 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
类型是可以为true
或false
的数据类型。布尔类型使用一个字节的内存。 [...]
从1.25.0开始,std::mem::size_of::<bool>()
的输出为1。
因此,确实可以依靠bool
为1字节(并且如果这个改变,它将是一个很大的声音)。