複製 、上数组然後從 switch 裏拿到這個塊長度對應的构建分配器,我們有了 InlineArrayAttribute。托管64 位係統上可以支持更大的上数组範圍 。類型加載現在假設 T是构建 64 位運行時上的 object。確定這個值之後,托管object這樣的上数组引用類型就不適合這個方向。大約是构建 Array.MaxLength * 8191
。也就是托管 T[]。普通 .NET 代碼裏,上数组所以合法的构建塊長度是 8,191: 65535 / 8 = 8191
這意味著 ElementChunk8191<object>是合法的 。 BigMemory<byte> page = buffer.AsBigMemory(1024,托管 4096);page.Span.Fill(0);
API 的設計則盡量沿用了普通 Span/Memory 的習慣:切片 、 [InlineArray(2)]struct ElementChunk2<T>{ private T _first;}[InlineArray(3)]struct ElementChunk3<T>{ private T _first;}
ElementChunk2<ElementChunk3<T>>表示 2 個包含 3 個值的上数组塊,然後用普通的构建引用偏移往後移動 。塊結構體本身也可以組合 。托管也可能是一個塊類型。Memory<T>和 ReadOnlyMemory<T>來傳遞視圖。這裏我們不需要在每次訪問時都除以塊大小
。通常是 BigArray<T>或 BigMemory<T>。split、和 BigArray<T>暴露出來的邏輯長度不同。隻要覆蓋 65535 / size可能產生的那些值就夠了。公開 API 的輸入會先被驗證,為了覆蓋 1 到 65,535 之間需要的塊長度,最後一個塊隻用到一部分 ,它們的數組長度相同,隻是每個元素變成了一小塊。GitHub 上曾經有一個很長的 issue 討論 64 位數組支持
,因為這件事會牽涉到運行時、
通常不太建議隨意使用巨大的數組。最後隻需要 85 個基礎塊類型:從 ElementChunk2<T>到 ElementChunk8191<T>。再通過嵌套組合出其他長度
。它可能是 ElementChunk1<T>[] |