Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.135.190.101] |
|
Страницы: (3) [1] 2 3 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Эмпирическим путем 2 дня назад вывел максимальное число элементов в массиве до переполнения: 50102267. Сегодня - этот массив оказался неспособен к расширению даже до 33554432.
Что происходит? |
Сообщ.
#2
,
|
|
|
Вчера на машине ехал 150 - нормально. А сегодня на 20 уже трясёт так, что того и гляди развалится... а то, что вчера автобан, а сегодня просёлок, с машиной ну никак не связано. |
Сообщ.
#3
,
|
|
|
Цитата Сергей85 @ Что происходит? Фрагментация |
Сообщ.
#4
,
|
|
|
Цитата B.V. @ Цитата Сергей85 @ Что происходит? Фрагментация А почему происходит это? У меня 32 гига оперативки; ну не может ему не хватать разместить этот массив целым где-нибудь на 30-м гигабайте. Добавлено Цитата Akina @ Я не менял рабочую машину и кол-во запускаемых программ. Ребут тоже не помогает. |
Сообщ.
#5
,
|
|
|
Почитайте здесь:
|
Сообщ.
#6
,
|
|
|
Цитата __Sergey__ @ Мне для массива память надо заранее зарезервировать - и смогу запихнуть хоть 60миллионов значений? |
Сообщ.
#7
,
|
|
|
Цитата Сергей85 @ Мне для массива память надо заранее зарезервировать - и смогу запихнуть хоть 60миллионов значений? чем отличается виртуальная память от физической? |
Сообщ.
#8
,
|
|
|
Цитата __Sergey__ @ В моем случае это не важно: файл подкачки отсутствует. |
Сообщ.
#9
,
|
|
|
Цитата __Sergey__ @ чем отличается виртуальная память от физической? Цитата Сергей85 @ В моем случае это не важно: файл подкачки отсутствует. У каждого процесса\приложения свое собственное виртуальное адресное пространство (АП), в котором выделенные блоки памяти (регионы адресов) проецируются ОС на физ.память (ОЗУ или файл подкачки). Обычному 32-битному процессу доступно всего лишь 2 Гб виртуальных адресов независимо от разрядности ОС и размера ОЗУ. Причем в этих же 2 Гб размещаются не только пользовательские данные, но и код самого приложения и всех используемых им (явно или не явно) системных dll. Примеры распределения памяти процесса можно посмотреть в таблицах 13-2 и 13-3 по приведенной выше ссылке на Рихтера. Посмотреть распределение памяти в собственной программе можно с помощью утилиты VMMap от М.Руссиновича. Основным параметром, определяющим возможность выделения большого массива данных, является Free\Largest - размер свободного региона виртуальной памяти максимального размера. Если он меньше требуемого размера массива, то получишь Out of memory. Посмотри, чему у тебя равно это значение и изменяется ли оно от запуска к запуску |
Сообщ.
#10
,
|
|
|
Цитата Сергей85 @ В моем случае это не важно: файл подкачки отсутствует. |
Сообщ.
#11
,
|
|
|
Цитата leo @ Ну, пусть есть некая флуктуация некоей памяти при каждой перезагрузке. Но как проблему-то решить? Нужно массив будет 2^25 создать - как это сделать? Уж очень близко я к этому пределу подобрался. П.с.: 2^24 работают на всех машинах; проверил даже на старье 2ГБ RAM. |
Сообщ.
#12
,
|
|
|
Цитата Сергей85 @ Но как проблему-то решить? Нужно массив будет 2^25 создать - как это сделать? Чтобы решить проблему, нужно понять из-за чего она возникает. Одномерный массив double из 225 элементов имеет размер всего лишь 268 Мб - это слишком мало, чтобы облом мог происходить из-за начальной фрагментации АП из-за загрузки всевозможных dll. Скорее всего ты что-то не договариваешь - возможно у тебя не один массив, а несколько, или память под массив ты выделяешь не однократно, а несколько раз увеличиваешь его размер через Redim Preserve, или еще что ... Цитата Сергей85 @ проверил даже на старье 2ГБ RAM Размер RAM тут роли не играет - при отсутствии клинической фрагментации АП можно и при 2Гб RAM выделить непрерывный кусок памяти до 1.5-1.7 Гб |
Сообщ.
#13
,
|
|
|
Цитата leo @ 6 Dim dNumbers_Array() As Double, dFormula_Array() As Double, ... ReDim dFormula_Array(2 ^ (UBound(dNumbers_Array) + 1) - 2) 'Максимальная размерность массива (сумма по всем направлениям) - 50102267. 33554432 соответствует 2^25 как максимальному количеству анализируемых чисел. Значение "все нули" не используется. Всё. |
Сообщ.
#14
,
|
|
|
Цитата leo @ Сделал несколько массивов 2^23 + Copymemory для них. Не вылетает ничего. Я не понимаю, что мне мешает. Свободной RAM - десятки гигабайт. |
Сообщ.
#15
,
|
|
|
Цитата Сергей85 @ Я не понимаю, что мне мешает. Свободной RAM - десятки гигабайт. Сколько можно повторять, что размер RAM тут никакой роли не играет. Приложение работает не с RAM, а со своими виртуальными адресами, коих у 32-битного процесса всего лишь 2Гб, и часть из них занята различными служебными данными. Скачай VMMap по вышеприведенной ссылке и посмотри, что там у тебя творится с занятыми и свободными адресами. |