我正在使用.NET Core 2.1和语言标准7.3。我希望引用一个固定的缓冲区而不获取指向它的指针。目前是否可能?
public unsafe struct InteropStruct
{
private fixed byte dataField[32];
public Span<byte> Data
{
get
{
//return a span referencing the private field without a fixed statement
}
}
}
我知道Span目前可以跟踪托管数组在垃圾回收期间的情况,因此我认为没有什么阻止它以类似的方式跟踪固定缓冲区。
如果不可能,那么如果我像下面这样使用fixed语句会发生什么:
public unsafe struct InteropStruct
{
private fixed byte dataField[32];
public Span<byte> Data
{
get
{
fixed (byte* ptr = dataField)
{
return new Span<byte>(ptr, 32);
}
}
}
}
如果在堆上将结构体包装在对象或类中,那么垃圾收集器会成为一个问题吗?
Span<T> MemoryMarshal.CreateSpan<T>(ref T reference, int length)
之前。 - Gamma_Draconis