System.Buffer.BlockCopy
采用 int
参数而不是 long
作为副本的偏移量/长度是否有原因?流通常使用 long
,为什么 BlockCopy
没有也需要 long
的重载?
最佳答案
因为在 .NET 4.5 之前,任何对象都不能超过 2 GB。因此没有理由使用多个 int 来表示长度。
即使在 .NET 4.5 中,虽然数组的长度可以超过 2 GB,但它的项目数不能超过 2^31。因此 byte[]
的最大大小仍然是 2 GB(减去一点开销)。 int[]
的最大大小为 2^31 项或大约 8 GB 等。请参阅 gcAllowVeryLargObjects .
关于c#-4.0 - 为什么 System.Buffer.BlockCopy 采用 int 而不是 long ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15487546/