2013-03-18 82 views
0

是否有理由System.Buffer.BlockCopy需要int參數而不是long作爲副本的偏移量/長度?流通常與long一起工作,爲什麼BlockCopy不會有也需要long的超載?爲什麼System.Buffer.BlockCopy採用int而不是long?

+0

爲了方便起見,您可以使用帶有int64索引的Array.Copy。但它不會像BlockCopy那樣高效。 – Todd 2017-12-02 07:06:03

回答

3

因爲在.NET 4.5之前,沒有任何對象可能超過2千兆字節。所以沒有理由有更多的int來表示長度。

即使在.NET 4.5中,雖然數組的長度可能超過2 GB,但它不能超過2^31個項目。所以byte[]的最大尺寸仍然是2千兆字節(減去一點開銷)。 int[]的最大大小爲2^31個項目或大約8千兆字節等。請參閱gcAllowVeryLargObjects

+0

啊,好的,謝謝你的信息。 – 2013-03-18 21:59:44

相關問題