3 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
一個(gè)數(shù)組在理論上最多可以包含2,147,483,647個(gè)元素,因?yàn)樗褂胕nt進(jìn)行索引。實(shí)際限制略低于此限制,具體取決于數(shù)組中包含的類型。
但是,.NET CLR中最大單個(gè)對(duì)象限制為2GB,即使在64位中也是如此。這是設(shè)計(jì)使然。
您可以輕松地實(shí)現(xiàn)一種IList<T>
在內(nèi)部保留多個(gè)數(shù)組并允許您擴(kuò)展到超過2GB單個(gè)對(duì)象限制的實(shí)現(xiàn),但是框架本身沒有一個(gè)。
但是,通常這不是一個(gè)真正的問題。大多數(shù)時(shí)候,您將擁有指向大型類的數(shù)組-因此該數(shù)組僅保存引用。這意味著您的陣列可以有效地指向許多GB的內(nèi)存-但是陣列本身不能大于2GB。
請(qǐng)注意,從.NET 4.5開始,有一個(gè)可供64位應(yīng)用程序加入的新選項(xiàng):gcAllowVeryLargeObjects。有了這個(gè)新的選項(xiàng)集,就可以UInt32.MaxValue
在多維數(shù)組中獲得(4,294,967,295)個(gè)元素,盡管一維數(shù)組仍限于2,146,435,071個(gè)元素(對(duì)于單字節(jié)數(shù)組或不包含任何字節(jié)的結(jié)構(gòu)數(shù)組,則為2,147,483,591個(gè)元素) 。
使用此選項(xiàng)的新規(guī)則是:
數(shù)組中元素的最大數(shù)量為UInt32.MaxValue。
對(duì)于字節(jié)數(shù)組和單字節(jié)結(jié)構(gòu)數(shù)組,任何單個(gè)維度的最大索引為2,147,483,591(0x7FFFFFC7),對(duì)于其他類型,最大索引為2,146,435,071(0X7FEFFFFF)。
字符串和其他非數(shù)組對(duì)象的最大大小不變。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超7個(gè)贊
.NET中任何一個(gè)對(duì)象的最大大小為2GB。
當(dāng)然,這對(duì)您可以制作原始陣列的大小設(shè)置了硬性限制。
您可以創(chuàng)建一個(gè)“數(shù)組數(shù)組”(甚至創(chuàng)建自己的索引器,就好像它是一個(gè)連續(xù)數(shù)組一樣),如果您為其定義了自己的類,則可以將其設(shè)為任意大小。
- 3 回答
- 0 關(guān)注
- 754 瀏覽
添加回答
舉報(bào)