Возможно ли сбой при инициализации при создании массива с размером N - PullRequest
0 голосов
/ 20 февраля 2012

Из того, что я понимаю, когда я создаю статический массив, скажем, int[] array = new int[N];, время выполнения фактически ищет N * 4 байта памяти, адреса которых также являются непрерывными. право

Так что, если во время выполнения не удается найти адреса непрерывной памяти?

например, если моя память 128 МБ, а в моем приложении N = 25 М, что означает, что мне нужно 100 МБ памяти для моего массива. Возможно ли это создание массива потерпеть неудачу? Возможно ли, что 100 МБ нужной памяти не может быть найдено из-за слишком большого количества фрагментов памяти?

спасибо

Ответы [ 2 ]

1 голос
/ 20 февраля 2012

Да, это может потерпеть неудачу.В этом случае OutOfMemoryException будет брошено.Простой способ проверить это:

int[] array = new int[int.MaxValue];

(предполагается, что C #, поведение в Java будет аналогичным)

0 голосов
/ 20 февраля 2012

Если мы говорим о C ++ (но в целом то же самое), то массивы являются смежными, что означает, что память имеет последовательные адреса, то есть она непрерывна в виртуальном адресном пространстве.Он не обязательно должен быть смежным в физическом адресном пространстве (программисты никогда не видят фактический адрес элемента массива, просто ссылку на массив и средства для его индексации).

В любом случае, если памяти недостаточно, вы получите исключение (это не смежный вопрос)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...