Здравствуйте, Shmj, Вы писали:
S>Пытаюсь создать массив более 2 GB через Array.CreateInstance и получаю ошибку Arrays larger than 2GB are not supported.
S>Можно ли их как то создать? Думается свойство LongLength не просто так добавлено.
Вроде бы все нормально?
Array.CreateInstance(typeof(Int32), 0X7FEFFFFF); // ~8GB
Здравствуйте, bnk, Вы писали:
bnk>Вроде бы все нормально?
bnk>bnk>Array.CreateInstance(typeof(Int32), 0X7FEFFFFF); // ~8GB
bnk>
Ок, почему byte тоже ограничен длиной 0X7FEFFFFF? Зачем тогда LongLength нужна?
Здравствуйте, Shmj, Вы писали:
S>Ок, почему byte тоже ограничен длиной 0X7FEFFFFF? Зачем тогда LongLength нужна?
Я не в курсе, почему индекс в ограничен конкретно этой цифрой, думаю на собеседовании бы засыпался
Просто принимаю как есть, типа как то что предметы падают вниз.
Здравствуйте, Shmj, Вы писали:
S>Немного пересмотрел вопрос. Если все равно нельзя создать массив более 0X7FEFFFFF — то зачем добавили свойство LongLength?
Вот, оказывается, зачем:
int[,] arr = new int[0X7F_EF_FF_FF, 2];
Console.WriteLine(arr.Length);
Здравствуйте, Shmj, Вы писали:
Это да, но тема
сисек почему максимальный индекс 0x7FEF.FFFF = (0x7FFF.FFFF — 0x10.000) все еще осталась нераскрытой
Здравствуйте, bnk, Вы писали:
bnk>Здравствуйте, Shmj, Вы писали:
bnk>Это да, но тема сисек почему максимальный индекс 0x7FEF.FFFF = (0x7FFF.FFFF — 0x10.000) все еще осталась нераскрытой
https://docs.microsoft.com/en-us/dotnet/framework/configure-apps/file-schema/runtime/gcallowverylargeobjects-element
The maximum size in any single dimension is 2,147,483,591 (0x7FFFFFC7) for byte arrays and arrays of single-byte structures, and 2,146,435,071 (0X7FEFFFFF) for arrays containing other types.
Видимо какая-то особенность реализации
https://referencesource.microsoft.com/#mscorlib/system/array.cs
// We impose limits on maximum array lenght in each dimension to allow efficient
// implementation of advanced range check elimination in future.
// Keep in sync with vm\gcscan.cpp and HashHelpers.MaxPrimeArrayLength.
// The constants are defined in this method: inline SIZE_T MaxArrayLength(SIZE_T componentSize) from gcscan
// We have different max sizes for arrays with elements of size 1 for backwards compatibility
internal const int MaxArrayLength = 0X7FEFFFFF;
internal const int MaxByteArrayLength = 0x7FFFFFC7;