2013-03-18 6 views
0

이유는 없습니까? System.Buffer.BlockCopy은 복사본의 오프셋/길이에 대해 long 대신 int 매개 변수를 사용합니까? 일반적으로 스트림은 long으로 작동합니다. BlockCopy에는 long이 필요한 오버로드가없는 이유는 무엇입니까?System.Buffer.BlockCopy가 long 대신 int를 사용하는 이유는 무엇입니까?

+0

편의를 위해 Array.Copy와 int64 색인을 함께 사용할 수 있습니다. 그러나 BlockCopy만큼 효율적이지는 않습니다. – Todd

답변

3

.NET 4.5 이전에는 개체가 2 기가 바이트를 초과 할 수 없었습니다. 그래서 그 길이를 나타내는 int 이상이 될 이유가 없었습니다.

.NET 4.5에서도 배열의 길이가 2GB를 넘을 수는 있지만 2^31 개를 초과 할 수는 없습니다. 따라서 byte[]의 최대 크기는 여전히 2GB입니다 (약간의 오버 헤드는 아님). int[]의 최대 크기는 2^31 항목 또는 약 8 기가 바이트입니다. gcAllowVeryLargObjects을 참조하십시오.

+0

아, 알았어 정보 주셔서 감사합니다. –

관련 문제