2013-03-18 2 views
0

Есть ли причина System.Buffer.BlockCopy принимает int параметров вместо long для смещения/длины копии? Потоки обычно работают с long, почему BlockCopy не имеет перегрузки, которая занимает long, тоже?Почему System.Buffer.BlockCopy принимает int вместо long?

+0

Для удобства вы можете использовать Array.Copy с индексом int64. Но это будет не так эффективно, как BlockCopy. – Todd

ответ

3

Поскольку до .NET 4.5 ни один объект не мог превышать 2 гигабайта. Поэтому нет причин иметь больше, чем int, чтобы представить длину.

Даже в .NET 4.5, хотя массив может иметь длину более 2 гигабайт, он не может содержать более 2^31 элементов. Таким образом, максимальный размер byte[] по-прежнему составляет 2 гигабайта (минус немного накладных расходов). Максимальный размер int[] составляет 2^31 элемента или около 8 гигабайт и т. Д. См. gcAllowVeryLargObjects.

+0

Ах, ладно спасибо за информацию. –

Смежные вопросы