#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-разрядная версия.