ref struct 与栈上类型:安全的高性能数据容器
探索 ref struct 如何被限制在栈上分配,避免装箱和堆引用,创建高性能临时数据结构。 · 难度:入门 · +10XP
ref struct 与栈上类型:安全的高性能数据容器
ref struct 是 C# 中唯一不能被装箱的类型,它们必须存活在栈上。本教程讲解如何利用 ref struct 包装 Span 或指针,实现零开销的临时缓冲区、迭代器和解析器。你会理解为什么 ref struct 不能作为字段、不能用于 async/await,以及如何通过 ref 返回结构体来传递大量数据而不复制。
public ref struct BufferReader
{
private ReadOnlySpan<byte> _buffer;
private int _pos;
public BufferReader(ReadOnlySpan<byte> buffer)
{
_buffer = buffer;
_pos = 0;
}
public int ReadInt32()
{
int val = System.Buffers.Binary.BinaryPrimitives.ReadInt32LittleEndian(_buffer.Slice(_pos));
_pos += 4;
return val;
}
}