как найти максимальный размер индекса массива?

#c#

#c#

Вопрос:

Я объявил массив

 double[,] i=new double[2147483647,10] ; //2147483647=max size of int
  

но это приводит к исключению из памяти

если я уменьшу индекс 2147483647 до 21474836, он будет работать нормально.

как я мог узнать максимальный размер массива?

Комментарии:

1. Какого черта вы делаете с более чем 210 миллионами удвоений?

2. Подумайте о том, насколько велик double и сколько ячеек вы пытаетесь выделить. double Равно 8 байтам, и вы пытаетесь выделить 2147483647 * 10 ячейки (не включая память для самих метаданных массива). Вам кажется разумным выделить 171 798 691 760 байт (~ 160 Гигабайт) памяти?

3. 2147483647 равен 7FFFFFFF … это максимум, который вы можете иметь с 32 битами

4. @Fischermaen.. О чем, черт возьми, вы говорите с более чем 210 миллионами удвоений? это более 2 миллиардов удвоений ..:)

5. @Fischermaen Я динамически инициализирую массив, поэтому я не мог предсказать максимальный размер массива. но некоторые временные значения такие большие.

Ответ №1:

возможно, причина в том, что индексация массива начинается с «0». итак, индекс первого элемента равен «0», последний «21474836».

Комментарии:

1. исходный индекс — 2147483647, а не 21474836.

Ответ №2:

в этом случае это (2 ^ 31). Я думаю, что это зависит от того, является ли ваша целевая 64-разрядная или 32-разрядная версия.