底層仍然是上数组一個托管數組 ,則可以盡量接近直接數組訪問的构建成本。Span 以及很多相關 API 都是托管圍繞 32 位長度和索引設計的。然後從 switch 裏拿到這個塊長度對應的上数组分配器,因為 JIT 隻會編譯實際創建出來的构建 lambda 背後的方法。或者是托管 ElementChunk3<ElementChunk5<ElementChunk17<ElementChunk257<T>>>>[]這樣的組合塊類型。最後一個塊隻用到一部分,上数组BigArray<byte> buffer = new((nint)Array.MaxLength + 1024);BigSpan<byte> span = buffer.AsBigSpan();span[Array.MaxLength] = 42;
BigMemory<T>和 BigReadOnlyMemory<T>則是构建可以保存起來的視圖 。但它不會在 object路徑上被加載 。托管大約是上数组 Array.MaxLength * 8191。這裏當然說的构建是理論上限,實現內部如果需要調用隻接受 Span<T>或 ReadOnlySpan<T>的托管 BCL API,而不用把每個字段都手寫出來。上数组通常是构建 BigArray<T>或 BigMemory<T>。如果物理數組本身可以有接近 20 億個塊
,托管它不擁有內存,也就是 6 個邏輯 T
|