@ svick, спасибо, я исправил ответ

ей 64-битной машине этот код C # работает:

new byte[2L * 1024 * 1024 * 1024 - 57]

но этот бросаетOutOfMemoryException:

new byte[2L * 1024 * 1024 * 1024 - 56]

Почему?

Я понимаю, что максимальный размер управляемого объекта составляет 2 ГБ и что создаваемый объект массива содержит больше байтов, чем я хочу. А именно, есть 4 байта (или 8?) Для номера синхронизирующего блока, 8 байтов для ссылки на MethodTable и 4 байта для размера массива. Это 24 байта, включая заполнение, так почему я не могу выделить массив с 2G - 24 байта? Действительно ли максимальный размерименно так 2 гб? Если это так, то для чего используются оставшиеся 2 ГБ?

Примечание: на самом деле мне не нужно выделять массив с 2 миллионами байтов. И даже если бы я сделал, 56 байтов незначительны. И я мог легко обойти предел, используя пользовательскиеBigArray<T>.

Ответы на вопрос(2)

Ваш ответ на вопрос