相关疑难解决方法(0)

数组可以容纳的最大大小是多少?

在C#2008中,数组可以容纳的最大大小是多少?

c# arrays

36
推荐指数
3
解决办法
9万
查看次数

为什么byte []的最大大小为2 GB - 57 B?

在我的64位机器上,这个C#代码有效:

new byte[2L * 1024 * 1024 * 1024 - 57]
Run Code Online (Sandbox Code Playgroud)

但是这个抛出一个OutOfMemoryException:

new byte[2L * 1024 * 1024 * 1024 - 56]
Run Code Online (Sandbox Code Playgroud)

为什么?

我知道托管对象的最大大小是2 GB,我正在创建的数组对象包含的内容超过了我想要的字节数.也就是说,同步块编号有4个字节(或8?),MethodTable参考有8个字节,数组大小有4个字节.这是24个字节,包括填充,所以为什么我不能分配一个2G-24字节的数组?最大尺寸真的 2 GB吗?如果是这样的话,2 GB的剩余部分用于什么?

注意:我实际上不需要分配一个包含200万字节的数组.即使我这样做,56个字节的开销可以忽略不计.我可以使用自定义轻松解决限制BigArray<T>.

.net arrays limits

28
推荐指数
1
解决办法
6469
查看次数

标签 统计

arrays ×2

.net ×1

c# ×1

limits ×1