是否有原因System.Buffer.BlockCopy
采用int
参数而不是long
用于副本的偏移量/长度?流通常与long
一起工作,为什么BlockCopy
也没有超载long
呢?
因为在。net 4.5之前,任何对象都不能超过2gb。因此,没有理由使用超过一个int来表示长度。
即使在。net 4.5中,尽管数组的长度可以超过2gb,但它的元素不能超过2^31个。因此,byte[]
的最大大小仍然是2 gb(减去一点开销)。int[]
的最大大小为2^31项或约8gb,等等。看到gcAllowVeryLargObjects。