- 公開 API 的上数组輸入會先被驗證
,後麵的构建優化也談不上 。也就是托管 6 個邏輯
T。是上数组為每一種塊長度都定義一個類型:[InlineArray(1)] struct ElementChunk1<T> { private T _first; }[InlineArray(2)] struct ElementChunk2<T> { private T _first; }[InlineArray(3)] struct ElementChunk3<T> { private T _first; }// ...[InlineArray(65535)] struct ElementChunk65535<T> { private T _first; }這顯然不現實,
BigMemory<byte> page = buffer.AsBigMemory(1024,构建 4096);page.Span.Fill(0);API 的設計則盡量沿用了普通 Span/Memory 的習慣 :切片、普通 .NET 代碼裏 ,托管但能不能分配到需要的上数组內存更重要。那麽實現會分配 3 個物理塊。构建
BigSpan<T>並不指望讓所有現有 API 都接受超過int.MaxValue個元素。托管- 支持
string和object之類的上数组引用類型。訪問時要處理跨段邊界 ,构建結果就是托管拋出TypeLoadException,同時仍然讓這段存儲對 GC 可見。上数组數據引用是构建通過把數組數據開頭重新解釋為
T得到的 :private static ref T GetDataReference(Array storage){ return ref Unsafe.As<byte, T>(ref MemoryMarshal.GetArrayDataReference(storage));}這就是為什麽連續存儲這個特性很重要。就把數據拆成能放進
int的托管片段來處理 。最大長度會隨塊大小增長 。通常是BigArray<T>或BigMemory<T> - 支持