Array、ArraySegment、Span<T>、Memory<T>,以及ReadOnlySpan<T>与ReadOnlyMemory<T>本质上都映射一段连续的内存,但是它们又有些差异,导致它们具有各自不同的应用场景。Array是一个类(引用类型),所以一个Array对象是一个托管对象,其映射的是一段托管堆内存。正因为Array是一个托管对象,所以它在托管堆中严格遵循“三段式(Object Header + TypeHandle + Payload)”内存布局,Payload部分包含前置的长度和所有的数组元素(数组的内存布局可以参阅我的文章《
.NET中的数组在内存中如何布局?》),其生命周期受GC管理。