С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
1

Как создать массив с количеством элементов больше System.Int32.MaxValue?

13.02.2023, 20:39. Показов 2005. Ответов 27
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как можно создать массив в C# .NET 6.0 с количеством элементов выше, чем значение System.Int32.MaxValue? При попытке создать массив длиной uint.MaxValue выходит ошибка: "System.OverflowException: "Arithmetic operation resulted in an overflow.".

Как можно создавать большие массивы на C# длиной ulong.MaxValue? И можно ли вообще так сделать? И есть ли какие-либо готовые библиотеки для работы с массивами неограниченной длины (если ограничены только объемом RAM)?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Блог
13.02.2023, 20:39
Ответы с готовыми решениями:

Создание задержки Task.Delay(...) более чем на Int32.MaxValue миллисекунд
Задался вопросом, можно ли Task.Delay() дать число, большее, чем длина int32? То есть, можно ли...

Как создать массив с неизвестным количеством элементов
Товарищи, скажите пожалуйста можно ли как-то сделать массив (НЕ КОЛЛЕКЦИИ), с неизвестным...

Почему массив B выводится System.Int32[]
using System; namespace ConsoleApp5 { class Program { static void...

Метод Graphics.DrawLine(Int32, Int32, Int32, Int32) Узнать координаты всех точек данной прямой
Как я могу получить координаты всех точек, создаваемых данных методом? Мне необходимо это в...

27
51 / 15 / 7
Регистрация: 09.02.2014
Сообщений: 209
13.02.2023, 20:57 2
ulong От 0 до 18 446 744 073 709 551 615
Куда уже больше, то.
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
13.02.2023, 21:04  [ТС] 3
Хотя бы длиной ulong.MaxValue
0
help
4576 / 4147 / 815
Регистрация: 13.04.2015
Сообщений: 9,105
13.02.2023, 21:11 4
Цитата Сообщение от Mavio Посмотреть сообщение
Хотя бы длиной ulong.MaxValue
А память у тебя есть под такой массив?
0
3683 / 2594 / 719
Регистрация: 02.08.2011
Сообщений: 6,964
13.02.2023, 21:33 5
Можно создать свой IEnumerable, под капотом которого будет связный список из массивов, суммарно по кол-ву элементов превышающих int.MaxValue.
Не уверен, можно ли ulong переменную использовать в качестве индексатора, на крайняк можно в виде метода оформить.
1
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
13.02.2023, 21:58  [ТС] 6
Цитата Сообщение от I can Посмотреть сообщение
А память у тебя есть под такой массив?
Всегда найдётся
0
help
4576 / 4147 / 815
Регистрация: 13.04.2015
Сообщений: 9,105
13.02.2023, 22:07 7
Цитата Сообщение от Mavio Посмотреть сообщение
Всегда найдётся
15 миллионов терабайт оперативки?
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
13.02.2023, 22:11  [ТС] 8
Цитата Сообщение от I can Посмотреть сообщение
15 миллионов терабайт оперативки?
Вполне
0
4183 / 1061 / 87
Регистрация: 21.04.2013
Сообщений: 7,535
13.02.2023, 22:18 9
Мимо пробегал, для какой задачи нужна такая длинна массива?
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
13.02.2023, 23:01  [ТС] 10
Цитата Сообщение от Storm Screamer Посмотреть сообщение
Мимо пробегал, для какой задачи нужна такая длинна массива?
Для лабы в ВУЗе нужно сделать разные сортировки и посчитать различные параметры у каждой сортировки. Одно из требований лабы - сделать с разным количеством элементов массива. Можно сделать в пределах миллиона или миллиарда, но хотелось бы проверить на большем количестве элементов, т.к. основной язык C#, то на нём и делаю. Изучать C, C++ для таких задач за пару дней не хотелось бы
0
Неадекват
1496 / 1233 / 247
Регистрация: 02.04.2010
Сообщений: 2,804
13.02.2023, 23:49 11
Лучший ответ Сообщение было отмечено Mavio как решение

Решение

Нативный массив нельзя. Ибо индексатор гвоздями прибит к int. Но ничто не мешает написать свой класс, который будет вести себя как массив.
1
4183 / 1061 / 87
Регистрация: 21.04.2013
Сообщений: 7,535
13.02.2023, 23:51 12
Цитата Сообщение от Mavio Посмотреть сообщение
но хотелось бы проверить на большем количестве элементов
Обычно студенты ленивы. Сомневаюсь, что для лабы, которую сдал и забыл такое делать кто-то будет.

Цитата Сообщение от Mavio Посмотреть сообщение
Изучать C, C++ для таких задач за пару дней не хотелось бы
Упоминание С/С++ мне не очень понятно. Дело в том, что программы написанные на том или ином языке работают не в вакууме, а в операционной системе, где присутствует менеджер памяти и существуют механизмы выделения памяти. Иначе говоря, если в Windows методы выделения памяти строго детерминированы самой ОС, то какая разница какой язык выбирать с точки зрения выделения памяти?

Методы выделения памяти Win32
0
0 / 0 / 0
Регистрация: 13.11.2017
Сообщений: 111
14.02.2023, 00:19  [ТС] 13
Цитата Сообщение от freeba Посмотреть сообщение
Ибо индексатор гвоздями прибит к int.
Это да, поэтому вопросы возникли

Добавлено через 14 минут
Цитата Сообщение от Storm Screamer Посмотреть сообщение
Обычно студенты ленивы. Сомневаюсь, что для лабы, которую сдал и забыл такое делать кто-то будет.
Ну ради интереса можно сделать, ибо потом в конце семестра будут вопросы на экзамене, проще заранее проверить эти тонкости.

Если код C# выполняется в CLR, то на C можно без этой прокладки обойтись. У C# точно ограничение есть в плане работы CLR, проблемы с максимальным индексом массива. С си как-то попроще с этим. Памяти всё равно хватит, пусть даже оперативки будет недостаточно
0
1150 / 858 / 263
Регистрация: 30.04.2009
Сообщений: 3,598
14.02.2023, 00:50 14
Я тебя сейчас наверное удивлю, но даже в In-Memory базе данных для аналитики (Sql Server Analysis Services) ограничения количества данных крутятся вокруг 2^32.
Не занимался бы ерундой, а потратил бы время на освоение темы лабораторной. Больше толку бы было.
0
Эксперт .NET
12550 / 8718 / 1311
Регистрация: 21.01.2016
Сообщений: 32,729
14.02.2023, 01:48 15
Цитата Сообщение от Mavio Посмотреть сообщение
Как можно создать массив в C# .NET 6.0 с количеством элементов выше, чем значение System.Int32.MaxValue?
Никак. Читаем документацию:

The array size is limited to a total of 4 billion elements, and to a maximum index of 0X7FEFFFFF in any given dimension (0X7FFFFFC7 for byte arrays and arrays of single-byte structures).
В 64битной среде сам массив (в байтах, суммарно) может быть более 2Гб, но количество элементов не может быть более 2^31.

Цитата Сообщение от Mavio Посмотреть сообщение
Можно сделать в пределах миллиона или миллиарда, но хотелось бы проверить на большем количестве элементов,
Ну, т.е. требования укусить себя за локоть у вас нет, это исключительно ваша хотелка, и плевать вам на ограничения среды?)
0
3564 / 2505 / 1174
Регистрация: 14.08.2016
Сообщений: 8,214
14.02.2023, 01:59 16
Цитата Сообщение от Usaga Посмотреть сообщение
это исключительно ваша хотелка
скорее отсутствие мозга, как такового, ну разве что, спинного...
0
help
4576 / 4147 / 815
Регистрация: 13.04.2015
Сообщений: 9,105
14.02.2023, 08:04 17
Цитата Сообщение от Usaga Посмотреть сообщение
не может быть более
Ну, справедливости ради, стоит отметить, что ниже есть абзац
NET Framework only: By default, the maximum size of an Array is 2 gigabytes (GB). In a 64-bit environment, you can avoid the size restriction by setting the enabled attribute of the gcAllowVeryLargeObjects configuration element to true in the run-time environment.
gcAllowVeryLargeObjects
И там уже
Using this element in your application configuration file enables arrays that are larger than 2 GB in size, but does not change other limits on object size or array size:

The maximum number of elements in an array is UInt32.MaxValue.

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.

The maximum size for strings and other non-array objects is unchanged.
Может отсюда ноги и растут?

Добавлено через 6 минут
Имхо, преподаватель задал ТС-у провокационный вопрос, чтобы стимулировать шевеление мозговой извилины.
0
Эксперт .NET
12550 / 8718 / 1311
Регистрация: 21.01.2016
Сообщений: 32,729
14.02.2023, 08:08 18
Цитата Сообщение от I can Посмотреть сообщение
The maximum number of elements in an array is UInt32.MaxValue.
Это в многомерном массиве всего. Но в каждой размерности не более Int32.MaxValue, но суммарно не более UInt32.MaxValue.

Мутная формулировка, согласен. Но ограничение вполне конкретное.

Ну и gcAllowVeryLargeObjects влияет только на размер (в байтах) всего массива целиком, а не на количество элементов в нём.
2
Эксперт .NET
11160 / 7077 / 1583
Регистрация: 25.05.2015
Сообщений: 21,414
Записей в блоге: 14
14.02.2023, 08:59 19
Создайте несколько массивов и индексатор, выбирающий нужный массив.

Добавлено через 2 минуты
Либо один большой файл с данными.
0
323 / 190 / 45
Регистрация: 25.08.2011
Сообщений: 1,261
14.02.2023, 09:22 20
Цитата Сообщение от Storm Screamer Посмотреть сообщение
Мимо пробегал, для какой задачи нужна такая длинна массива?
Новая версия хрома чтоли??

Ну а вообще может неуправляемое выделение делать?? Но тогда нужен будет свой менеджер какой нибудь.
0
14.02.2023, 09:22
cpp_developer
Эксперт
20123 / 5690 / 417
Регистрация: 09.04.2010
Сообщений: 12,546
Блог
14.02.2023, 09:22
Помогаю со студенческими работами здесь

Как правильно создать массив с заданным в ручную количеством элементов в массиве
В наличии имеется такой код #include "stdafx.h" #include <iostream> #include <clocale> using...

Не удалось привести тип объекта "<>f__AnonymousType0`6[System.Int32,System.String,System.String,System.St­­­ring,Stri
Cам listbox: &lt;ListBox x:Name=&quot;ActualList&quot; Background=&quot;Transparent&quot;...

Невозможно выполнить операцию 'Like' над System.Int32 и System.String.
Невозможно выполнить операцию 'Like' над System.Int32 и System.String. regBindingSource.Filter =...

Невозможно выполнить операцию 'Like' над System.Int32 и System.String
У меня в базе Access, есть вот эти столбцы, id-счетчик, номер_заявки-числовой, и дата_заявки-Дата и...

Не удалось привести тип объекта System.Int32 к типу System.String"
Помогите пожалуйста public Glavn() { InitializeComponent(); ...

Дан массив С(Х). Заменить элементы, значение которых больше 7, количеством четных элементов этого массива
Дан массив С(Х). Заменить элементы, значение которых больше 7, количеством четных элементов этого ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Блоги программистов
Как использовать GraphQL в C# с HotChocolate
Programming 05.01.2025
GraphQL — это современный подход к разработке API, который позволяет клиентам запрашивать только те данные, которые им необходимы. Это делает взаимодействие с API более гибким и эффективным по. . .
Модель полного двоичного суматора с помощью логических операций (python)
AlexSky-coder 04.01.2025
def binSum(x:list, y:list): s=^y] p=x and y for i in range(1,len(x)): s. append((x^y)^p) p=(x and y)or(p and (x or y)) return s x=list() y=list()
Это мы не проходили, это нам не задавали...(шес­­­­­­тиби­тный асихронный счётчик с управляющим сигналом задержки).
Hrethgir 04.01.2025
Асинхронный счётчик на сумматорах (шестиразрядный по числу диодов на плате, но наверное разрядов будет больше - восемь или шестнадцать, а диоды на старшие), так как триггеры прошли тестирование и. . .
Руководство по созданию бота для Телеграм на Python
IT_Exp 04.01.2025
Боты для Телеграм представляют собой автоматизированные программы, которые выполняют различные задачи, взаимодействуя с пользователями через интерфейс мессенджера. В данной статье мы рассмотрим,. . .
Применение компонентов PrimeVue в Vue.js 3 на TypeScript
BasicMan 04.01.2025
Введение в PrimeVue и настройка окружения PrimeVue представляет собой мощную библиотеку компонентов пользовательского интерфейса для Vue. js 3, которая предоставляет разработчикам богатый набор. . .
Как стать Senior developer
cpp_developer 04.01.2025
В современной индустрии разработки программного обеспечения позиция Senior Developer представляет собой не просто следующую ступень карьерной лестницы, а качественно новый уровень профессионального. . .
Что известно о дате выхода Windows 12 и чего от нее ждать
IT_Exp 04.01.2025
В мире технологий постоянно происходят изменения, и операционные системы не являются исключением. Windows 11, выпущенная в октябре 2021 года, принесла множество инноваций и улучшений, но. . .
Что новенького в .NET Core 9
Programming 04.01.2025
Обзор ключевых изменений в . NET Core 9 Платформа . NET Core продолжает активно развиваться, и версия 9 представляет собой значительный шаг вперед в эволюции этой технологии. Новый релиз. . .
Инструкция по установке python3.13.1 в Debian 12
AlexSky-coder 03.01.2025
sudo apt update sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libreadline-dev libffi-dev wget. . .
Затестил триггеры. архив проекта прилагаю с GOA файлами в настройках архиватора проектов.
Hrethgir 03.01.2025
В этот раз нет закольцованности, потому что от неё только глюки, как я понял, логика не вырезанная. Триггеры очень быстрые если верить измерениям с помощью анализатора от Gowin. Есть ещё регистры,. . .
Python в помощь DevOps
IT_Exp 03.01.2025
Причины использования Python в работе DevOps Python стал неотъемлемой частью мира DevOps, и это не случайно. Этот язык программирования обладает множеством преимуществ, которые делают его. . .
Angular vs React vs Vue.js
BasicMan 03.01.2025
О, друзья-разработчики и просто любопытные читатели! Сегодня мы отправимся в увлекательное путешествие по миру фронтенд-разработки, и первой остановкой станет Angular – этакий строгий немецкий. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru