我試圖創建一個長度爲UInt32.MaxValue
的byte
的數組。該陣列基本上是一個小的(ISH)的內存數據庫:字節[]的最大長度?
byte[] countryCodes = new byte[UInt32.MaxValue];
在我的機器,但是,在運行時,我得到一個System.OverflowException
「算術運算導致溢出」。
這是怎麼回事?我是否需要使用unsafe
區塊和malloc
?我將如何在C#中做到這一點?
我試圖創建一個長度爲UInt32.MaxValue
的byte
的數組。該陣列基本上是一個小的(ISH)的內存數據庫:字節[]的最大長度?
byte[] countryCodes = new byte[UInt32.MaxValue];
在我的機器,但是,在運行時,我得到一個System.OverflowException
「算術運算導致溢出」。
這是怎麼回事?我是否需要使用unsafe
區塊和malloc
?我將如何在C#中做到這一點?
System.Array
的當前實現對其所有內部計數器等使用Int32
,所以元素的理論最大數量爲Int32.MaxValue
。
還有一個由Microsoft CLR施加的每個對象最大2GB的限制。
很好的討論和解決辦法在這裏...
和一些相關,不-相當重複的,問題和答案在這裏...
我不會這樣做的第一個地方。爲什麼你想爲這個內存數據庫設置所有內存?難道你不想要一個數據結構的大小隨着你的增長而增加(例如List<int>
)?或者(如果喜歡)使用內存數據庫,如sqlite?
.NET 4.5一個字節數組的最大可實例化長度爲:2147483591,或56小於int.MaxValue。發現通過:
for (int i = int.MaxValue; i > 0; i--)
{
try
{
byte[] b = new byte[i];
Console.Out.WriteLine("MaxValue: " + i);
Environment.Exit(0);
}
catch (Exception ignored)
{}
}
我不知道有這麼多的國家! – James 2015-06-10 21:47:45